Pomijanie linijki tekstu z polskimi znakami w kodowaniu Mazovia

Pomijanie linijki tekstu z polskimi znakami w kodowaniu Mazovia
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Witam, mam w różnego rodzaju tekst, który chciałbym wysłac do dukarki (fiskalnej) po RS (COM) z same prcedurą wysłania sobie poradziłem, ale nie bardzo wiem jak sobie poradzić z problemem, jezeli w teksie pojawi siępolska litera to niestety wydruk całego wiersza jest pomijany, czy jest ktoś kto pomoze i podpowie jak dokonać konwersji tekstu na kodowanie MAZOVIA (taki standard jest stosowany). Z góry dziękuję za zainteresowanie i pomoc.

z poważaniem
Janbit

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Jaka to drukarka? Z tego co wiem, kodowanie na przykład w posnetowskich można przełączyć.

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Emar Printo bus bez możliwości przełączenia na inny standard polskich liter

MY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1107
1

Ale jaki to problem zamienić kodowanie znaków? Tu masz tabelę z różnych standardach https://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w

A jakbyś trochę pogooglował nawet znalazłbyś gotowy przykładowy kod http://pl.comp.lang.delphi.bazy-danych.narkive.com/LPSnW21R/delphi-i-mazovia

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

Robisz odpowiednio spreparowaną tabelę const konwersja : array[AnsiChar] of AnsiChar i w pętli robisz coś takiego:

Kopiuj
len := Length(tekst);
SetLength(tekst_maz, len);
for i:=1 to len do
    tekst_maz[i] := konwersja[tekst[i]];
JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Azarien czy kod moza wyglądać tak, czy są błędy (bo szczerze nie kompiluje mi)

Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
const
konwersja : array[AnsiChar] of AnsiChar
begin
len := Length(Edit1.tekst);
SetLength(tekst_maz, len)
for i:=1 to len do
begin
    tekst_maz[i] := konwersja[tekst[i]];
     i:=i+1
end;
  label1.caption := tekst_maz;
end;
flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
0

@janbit: przecież ten kod nie ma żadnego sensu - brakuje w nim połowy danych...


Kopiuj
konwersja : array[AnsiChar] of AnsiChar

Gdzie jest definicja macierzy 255 znaków?

Kopiuj
len := Length(Edit1.tekst);

Gdzie jest deklaracja zmiennej len?

Kopiuj
SetLength(tekst_maz, len)

Gdzie jest deklaracja zmiennej tekst_maz?

Kopiuj
for i:=1 to len do

Gdzie jest deklaracja zmiennej i?


Kod konwertujący kodowanie natywne na mazovię pasowałoby opakować w jakąś funkcję:

Kopiuj
function NativeToMazovia(const AValue: AnsiString): AnsiString;
const
  MAZOVIA_CHARS: array [AnsiChar] of AnsiChar = ({tu lista znaków odpowiednich dla mazovii});
var
  LIndex: Integer;
begin
  SetLength(Result, Length(AValue));

  for LIndex := 1 to Length(AValue) do
    Result[LIndex] := MAZOVIA_CHARS[AValue[LIndex]];
end;

Jeśli potrzebujesz konwertować tylko relatywnie krótkie łańcuchy to możesz skorzystać z pętli for in:

Kopiuj
function NativeToMazovia(const AValue: AnsiString): AnsiString;
const
  MAZOVIA_CHARS: array [AnsiChar] of AnsiChar = ({tu zapis znaków odpowiednich dla mazovii});
var
  LChar: AnsiChar;
begin
  for LChar in AValue do
    Result := Result + MAZOVIA_CHARS[LChar];
end;

Nie wiem czy Delphi które posiadasz, obsługuje tę pętlę - sprawdź sobie; No i jeśli łańcuchy znaków natywnie kodowane są w ANSI to możesz po prostu użyć typów String i Char.

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

po poprawkach

Kopiuj
procedure TForm1.Button1Click(Sender: TObject);
const
konwersja : array[AnsiChar] of AnsiChar

var
i:Integer;
len:integer;
tekst_maz:string;
tekst:AnsiChar;
konwersja : array[AnsiChar] of AnsiChar;
begin
len := Length(Edit1.text);
SetLength(tekst_maz, len);
for i:=1 to len do
begin
    tekst_maz[i] := konwersja[tekst[i]];
     i:=i+1
end;
  label1.caption := tekst_maz;
end;
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

No ale zawartość tabeli konwersja to już musisz sobie wygenerować samemu.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
0

@janbit: zobacz tutaj - Mazovia encoding - przyda Ci się do zdefiniowania zawartości macierzy.

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

dziękuję za wszystkie sugestie

Kopiuj
PrintPar('Nazwa Ulgi', nrbiletu1, '    ', dataod1, datado1, 'Z DOKUMENTEM OSOBISTYM', nrdok1, imie1, nazwisko1, ulica1, kodpocztowy1, przystanek1, przystanek2, FloatToStr(kmt1), przystanek11, przystanek22, floattostr(kmt2), 'Kom. miedzymiastowa', '1', 'B', '150.00', '150.00', 'NrTrans', '76.50')

jest to funkcja wysyłająca teść na df
i zatem imi1, nazwisko1, ulica1, ..... muszę pokolei przekonwertować na MAZOWIĘ, by wydruk był w całości czytelny

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
0

Przykłady konwerterów zostały już podane, więc skorzystaj z nich i z artykułu na wikipedii;

Natomiast co do powyższego kodu - weź zadeklaruj sobie jakąś strukturkę i do niej pakuj wszystkie dane, a do parametru funkcji PrintPar podawaj tylko wspomniany rekord; Jeśli tego PrintPar sam nie pisałeś (bo pochodzi z jakiegoś zewnętrznego API) to napisz na to wrapper, bo milion argumentów bardzo obniża czytelność kodu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.