Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UFT-8 Zeichen aus TXT an Drucker (https://www.delphipraxis.net/133946-uft-8-zeichen-aus-txt-drucker.html)

HAWK_ 12. Mai 2009 15:54


UFT-8 Zeichen aus TXT an Drucker
 
Hallo Profis,

ich habe mal wieder kleines Problemchen.
Ich möchte gern polnischen Text aus einer Textdatei auslesen und diesen dann per Assign auf eine Druckerschnittstelle (LPT1 o. Netzwerkpfad) schreiben.
Leider ist das für mich absolutes Neuland. Ich habe hier schon mal ein paar Threads durchgelesen, aber leider bis jetzt aber noch nichts brauchbares gefunden.
Derzeit lese ich Textdateien mit AssignFile ein. Bei der Übergabe der Daten an den Drucker müssen ebenfalls die UFT8 Zeichen erhalten bleiben.
Vielen Dank vorrab.


Gruß HAWK

Bernhard Geyer 12. Mai 2009 16:43

Re: UFT-8 Zeichen aus TXT an Drucker
 
Du wirst eine Unicdefähgies Assign benötigen oder mit CreateFileW direkt arbeiten müssesn. Der Drucker wird kein UTF8 verstehen sondern nur per Widestrings den Text annehmen können.

shmia 12. Mai 2009 17:43

Re: UFT-8 Zeichen aus TXT an Drucker
 
Willst du den Drucker direkt in seiner eigenen Druckersprache ansteuern (wenn ja, welche) oder den Windows Druckertreiber verwenden?

HAWK_ 13. Mai 2009 07:08

Re: UFT-8 Zeichen aus TXT an Drucker
 
den Drucker steuer ich direkt in seiner eigenen Sprache an. Ist ein CAB-Etikettendrucker. Der kann UFT-8, die Zeichen über die Schnittstelle retten, ist mir noch unklar.
Was ist ein Unicode-fähiges Assign?
-> CreateFileW schaue ich mir gleich mal an.

Die Programmierung sieht zur Zeit so aus...

Delphi-Quellcode:
  UTF8String = type string;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var lv_matnr,lv_data,lv_text:string;
    fdata:textfile;
    lv_data2 :widestring;
label jump;
begin
     lv_matnr := '50008045002990';
     AssignFile(fdata,'c:\polen.txt');
     {$I-}
     Reset(fdata);
     {$I-}
     If ( IOResult = 0 ) Then
     begin
          While not EOF(fdata) do
          begin
               Readln(fdata,utf8string(lv_data));
               lv_data2 := UTF8encode(UTF8String(lv_data));
               If Copy(lv_data2,1,14) = lv_matnr then
               begin
                    lv_text:=Copy(lv_data2,16,30);
                    goto jump;
               end;
          end;
          jump:
          closefile(fdata);
     end;
in lv_data steht der UTF-8 string. Nach dem Encode sind fast alle überflüssigen Zeichen weg, nur an erster Stelle steht noch ein "?". Ist das normal?

Bbommel 13. Mai 2009 08:20

Re: UFT-8 Zeichen aus TXT an Drucker
 
Mit welcher Delphi-Version arbeitest du eigentlich? Ist gerade bei dem Unicode-Thema seit D2009 eine ziemlich wichtige Info.

Bis denn
Bommel

HAWK_ 13. Mai 2009 08:30

Re: UFT-8 Zeichen aus TXT an Drucker
 
Sorry, ich benutze D7

Bbommel 13. Mai 2009 08:43

Re: UFT-8 Zeichen aus TXT an Drucker
 
Hm, okay, in dem Fall verstehe ich entweder die Fragestellung oder den bisherigen Code noch nicht so ganz. ;)

Also: Du hast eine Textdatei, die UTF8-Codiert ist. Und du willst einen Text ebenfalls UTF8-codiert an den Drucker weitergeben. Zwischendurch willst du mit diesem Text eigentlich nix anderes machen (also bspw. in Unicode umwandeln, um ihn irgendwie am Bildschirm auszugeben oder so). Richtig soweit?

Denn dann könntest du dir diese ganzen Umwandlungen, die du da machst, eigentlich sparen:

Delphi-Quellcode:
var lv_matnr,lv_data,lv_text:string;
    fdata:textfile;
    lv_data2 :widestring;
label jump;
begin
     lv_matnr := '50008045002990';
     AssignFile(fdata,'c:\polen.txt');
     {$I-}
     Reset(fdata);
     {$I-}
     If ( IOResult = 0 ) Then
     begin
          While not EOF(fdata) do
          begin
               Readln(fdata,lv_data);
[...]
In D7 sollte es nun eigentlich so sein, dass lv_data nach dem Readln den UTF8-String enthält, der in der Textdatei steht. Delphi sollte den nicht verändern. Wenn du einen UTF8-String an den Drucker weitergeben willst, dann nimm lv_data und mach das. :)

Oder übersehe ich hier gerade irgendwas?

Bis denn
Bommel

HAWK_ 13. Mai 2009 10:41

Re: UFT-8 Zeichen aus TXT an Drucker
 
im prinzip war das nur ne spielerei. Wenn ich die Datei einlese und eine Breakpoint setze, sehe ich ja was in der Variable drin steht. Egal in welchenm Fall (mit oder ohne UFT8STring) stehen dort einige kryptische Zeichen drin. Mit denen kann ich nicht arbeiten. Der Drucker übernimmt die 1:1

Beispiel das Wort Krążek
Das sollte nach dem Einlesen ja genauso in der Varaible stehen. Bisher hab ich noch kein Mittel gefunden, dass es das auch tut.

Reinhard Kern 13. Mai 2009 10:58

Re: UFT-8 Zeichen aus TXT an Drucker
 
Zitat:

Zitat von HAWK_
im prinzip war das nur ne spielerei. Wenn ich die Datei einlese und eine Breakpoint setze, sehe ich ja was in der Variable drin steht. Egal in welchenm Fall (mit oder ohne UFT8STring) stehen dort einige kryptische Zeichen drin. Mit denen kann ich nicht arbeiten. Der Drucker übernimmt die 1:1

Beispiel das Wort Krążek
Das sollte nach dem Einlesen ja genauso in der Varaible stehen. Bisher hab ich noch kein Mittel gefunden, dass es das auch tut.

Hallo,

wenn du das sowieso 1:1 weiterleitest, warum liest du die Datei dann nicht einfach als Bytes ein?

Gruss Reinhard

Bbommel 13. Mai 2009 11:10

Re: UFT-8 Zeichen aus TXT an Drucker
 
Zitat:

Zitat von HAWK_
im prinzip war das nur ne spielerei. Wenn ich die Datei einlese und eine Breakpoint setze, sehe ich ja was in der Variable drin steht. Egal in welchenm Fall (mit oder ohne UFT8STring) stehen dort einige kryptische Zeichen drin. Mit denen kann ich nicht arbeiten. Der Drucker übernimmt die 1:1

Beispiel das Wort Krążek
Das sollte nach dem Einlesen ja genauso in der Varaible stehen. Bisher hab ich noch kein Mittel gefunden, dass es das auch tut.

Das Wort sollte dann etwa so aussehen: Krążek

Genau das wäre das UTF8-Format (das sieht halt nicht so schön aus, wenn man es sich als normalen String anguckt). Wenn dein Drucker UTF8 kann, dann sollte er genau damit zurecht kommen.

Im Widerspruch dazu steht allerdings deine Aussage "mit denen kann ich nicht arbeiten" - watt denn nun? ;)

Um aus diesem UTF8-codierten String nun wieder das mit polnischen Zeichen lesbare Unicode zu machen, bräuchtest du übrigens UTF8Decode (also "de", nicht "en").

Um bei dem Beispiel von vorhin zu bleiben:

Delphi-Quellcode:
var lv_matnr,lv_data,lv_text:string;
    fdata:textfile;
    lv_data2 :widestring;
label jump;
begin
     lv_matnr := '50008045002990';
     AssignFile(fdata,'c:\polen.txt');
     {$I-}
     Reset(fdata);
     {$I-}
     If ( IOResult = 0 ) Then
     begin
          While not EOF(fdata) do
          begin
               Readln(fdata,lv_data);
               lv_data2:=UTF8Decode(lv_data);
lv_data enthält nun "Krążek" (UTF8), lv_data2 enthält "Krążek" (als "echten" Widestring in Delphi).

Vielleicht hilft dir das noch ein bisschen weiter, was auch immer genau du nun brauchst...

Bis denn
Bommel


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz