Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Textdatei mit Sonderzeichen auslesen (https://www.delphipraxis.net/105524-textdatei-mit-sonderzeichen-auslesen.html)

Cster 23. Dez 2007 17:51


Textdatei mit Sonderzeichen auslesen
 
HI!

Ich hab ein paar Probleme damit, eine Textdatei auszulesen. Das liegt wohl daran, dass sie Sonderzeichen und Co. enthlt. Mein Test-Code sieht so aus:

Delphi-Quellcode:
var
  Form1: TForm1;
  F: TextFile;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   S: string;
begin
   ReadLn(F, S);
   Memo1.Lines.Add(S);
end;

procedure TForm1.FormCreate(Sender: TObject);
const
   Path = 'C:\Users\Cster\AppData\Roaming\Meine Die Schlacht um Mitte' +
      'lerde-Dateien\Replays\to be watched\gvsM,Fangorn,Uruks.rep';
begin
   AssignFile(F, Path);
   Reset(F);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   CloseFile(F);
end;
Wenn ich Button1 nun mehmals klicke werden allerdings immer nur lckenhafte Bruchstcke der Datei in mein Memo geschrieben. Wie erhalte ich den gesamten Text der Datei?

3_of_8 23. Dez 2007 17:53

Re: Textdatei mit Sonderzeichen auslesen
 
Was verstehst du unter Sonderzeichen? Und wie ist die Codierung der Datei?

grenzgaenger 23. Dez 2007 18:01

Re: Textdatei mit Sonderzeichen auslesen
 
bring doch mal 'n bespielinhalt der datei ... welche du einlesen mchtest...

Bernhard Geyer 23. Dez 2007 18:10

Re: Textdatei mit Sonderzeichen auslesen
 
Meine Glaskugel sagt mit das es sich um eine Unicode-Codierte Textdatei handelt. Mit Elpack (TLMDWideStringList), TNTWare (TNTWideStringList), oder dem JCL (TWideStringList) sollte sich das lesen lassen. Im Forum drften auch einige Beispiel zum einlesen von Unicode-Textdateien finden.

Cster 23. Dez 2007 18:27

Re: Textdatei mit Sonderzeichen auslesen
 
Dies ist der Anfang der Textdatei:

Code:
BFMEREPLEGG*GG.  d             L a a t s t e  h e r h a l i n g         5 V e r s i e  1 . 0 3   N o v  2 8   2 0 0 5   1 7 : 1 5 : 1 0     p
7+!d    M=000maps/map mp fangorn;MC=0;MS=0;SD=22162;S=Hlaurentlefou,54652BC4,10643,FT,1,4,-1,0,1:Huruksofzillegem,5386925B,12808,FT,5,6,-1,1,1:X:X:X:X:X:X:; 1                          a          
   a         
   a            `         .     @DD A                                    .      D *D  B                   5  6`DμD A@                                         #   .      ;E |D A%          &       V  '         (   .     ]yD`D A*   .     ʦDZD  A+             2   #            m    2            4   .     NDBD A6        g  ;  .     DDB<        |  ؍=EcD A6<       A         A  .     IDAxD HBC  .     3HD.uD HBF  #           7        F         I  .     bDnD  AM         N         <{D,*D A    S              T       U         Z  .     ޜDVD Bc  #           i  ]     c         d  .     *DZD  Ae  I      
Die Stelle, die mich interessiert, ist ";S=Hlaurentlefou,54652BC4,10643,FT,1,4,-1,0,1:Huruksofzillegem,5386925B,12808,FT,5,6,-1,1,1". Mit meinem Code kriege ich sie aber nicht in mein Memo. :?

DeddyH 23. Dez 2007 18:30

Re: Textdatei mit Sonderzeichen auslesen
 
Bist Du Dir sicher, dass es sich um eine Textdatei handelt?

Namenloser 23. Dez 2007 19:17

Re: Textdatei mit Sonderzeichen auslesen
 
Code:
L a a t s t e  h e r h a l i n g
Die Leerstellen deuten auf Unicode hin. Dabei ist ein Zeichen nicht 1, sondern 2 Byte lang (IMHO! Vllt. verwechsle ich das auch mit UTF-8 oder so...). Sprich, es ist so aufgebaut: XX 00. Wenn Delphi den Code jetzt als Ansi-String einliest, trifft es auf die 00 und schneidet dort den Stringt ab.
Versuch mal, es mit einem Filestream einzulesen und dann die Stelle herauszukopieren. Vllt. kannst du es auch direkt in einen WideString kopieren, aber mit WideStrings habe ich noch nie gearbeitet, von daher kann ich das nicht sicher sagen.

Cster 23. Dez 2007 20:53

Re: Textdatei mit Sonderzeichen auslesen
 
Danke schonmal fr eure Antworten.
Zitat:

Zitat von DeddyH
Bist Du Dir sicher, dass es sich um eine Textdatei handelt?

Naja, sie beinhaltet auch Text. "laurentlefou" und "uruksofzillegem" sind bspw. Spielernamen und die beiden achtstelligen Zahlen zwischen den Kommas sind deren IPs (hexadezimal).

Wenn ich bei 5mal Button 1 klicke steht im Memo:

Code:
BFMEREPLEGG*GG.
7+!d
kI.d
kI.d
 
Teils wird die Datei also richtig gelesen, nur andere Teile werden leider total bersprungen :(

S als Widestring zu deklarieren, hat nix gendert. Mit TFileStream komm ich auch nicht viel weiter

Zitat:

Zitat von Bernhard Geyer
Meine Glaskugel sagt mit das es sich um eine Unicode-Codierte Textdatei handelt. Mit Elpack (TLMDWideStringList), TNTWare (TNTWideStringList), oder dem JCL (TWideStringList) sollte sich das lesen lassen. Im Forum drften auch einige Beispiel zum einlesen von Unicode-Textdateien finden.

Ich lad mir gerade die Jedis runter und schau dann mal, wie weit ich komme :)

inherited 23. Dez 2007 21:20

Re: Textdatei mit Sonderzeichen auslesen
 
Warum willst du es berhaupt in ein Memo laden? Lad es mit einem Filestream oder hnlichem und lies die Bytes aus.

grenzgaenger 23. Dez 2007 22:24

Re: Textdatei mit Sonderzeichen auslesen
 
wie wird die datei eigentlich erstellt? mit welchem progy?

ps: was du machen kannst, ist die datei binr einzulesen und die sichtbaren zeichen auszufiltern und im memo darzustellen also im groben

Delphi-Quellcode:
if (b>$27) and (b<127) then
begin //lesbar
<HTH>

Cster 24. Dez 2007 16:11

Re: Textdatei mit Sonderzeichen auslesen
 
Zitat:

Zitat von inherited
Warum willst du es berhaupt in ein Memo laden? Lad es mit einem Filestream oder hnlichem und lies die Bytes aus.

Aah, nun hab ich's doch mit FileStream hingekriegt :)

Danke an alle

grenzgaenger 24. Dez 2007 18:22

Re: Textdatei mit Sonderzeichen auslesen
 
und was war jetzt das problem?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 Uhr.

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