Pomijanie linijki tekstu z polskimi znakami w kodowaniu Mazovia

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

0

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

0

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

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

1

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

len := Length(tekst);
SetLength(tekst_maz, len);
for i:=1 to len do
    tekst_maz[i] := konwersja[tekst[i]];
0

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

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;
0

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


konwersja : array[AnsiChar] of AnsiChar

Gdzie jest definicja macierzy 255 znaków?

len := Length(Edit1.tekst);

Gdzie jest deklaracja zmiennej len?

SetLength(tekst_maz, len)

Gdzie jest deklaracja zmiennej tekst_maz?

for i:=1 to len do

Gdzie jest deklaracja zmiennej i?


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

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:

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.

0

po poprawkach

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;
0

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

0

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

0

dziękuję za wszystkie sugestie

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1