Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi datei einlesen und in memo schreiben (https://www.delphipraxis.net/16099-datei-einlesen-und-memo-schreiben.html)

jority 10. Feb 2004 12:22


datei einlesen und in memo schreiben
 
hi und guten tag,
ich habe ein problem mit einer datei die sich so einfach leider nicht einlesen läßt.
das problem liegt darin das mehrere Rechnungen in eine Datei geschrieben werden aber in dieser datei die verschiedenen Rechnungen mit #1013 voneinander getrennt sind.
so interpretiert Delphi dies nun als Dateiende was ja so nicht stimmt.
weiß jemand wie ich dieses umgehen kann und mir den Text der gesamten Datei dann in einem Memo ausgeben lassen kann?

gruß Jority

Bobator 10. Feb 2004 12:24

Re: datei einlesen und in memo schreiben
 
hi,

dumme antwort, aber funzt net Memo1.Lines.LoadFromFile(); ??? :?:

Tpercon 10. Feb 2004 12:25

Re: datei einlesen und in memo schreiben
 
Wie ließt du dies den momentan ein?
Meinst du nicht #10#13?

jority 10. Feb 2004 14:21

Re: datei einlesen und in memo schreiben
 
ja ich meine #10#13.
und nein leider funzt memo1.lines.loadfromfile(datei); nicht.
da liegt ja eben der hund begraben.

gruß jority

Tpercon 10. Feb 2004 14:29

Re: datei einlesen und in memo schreiben
 
Hast du die Datei schonmal versucht mittels ner Schleife mit ReadLn einzulesen?

jority 10. Feb 2004 14:57

Re: datei einlesen und in memo schreiben
 
weiß jetzt grad garnicht so wirklich wie ich das machen müsste kannst du ein kleines beispiel posten?

MikeS 10. Feb 2004 15:00

Re: datei einlesen und in memo schreiben
 
versuchs doch mal damit

Delphi-Quellcode:
[..]

var fromf: textfile;
    speicher: string;

begin
  assigenfile(fromf, 'deine datei');
  reset(fromf);
  repeat
    readln(fromf, speicher);
  until(EOF(fromf));
end;

Tpercon 10. Feb 2004 15:07

Re: datei einlesen und in memo schreiben
 
Vorsicht, eine Kopfgesteuerte Schleife (while) wäre hier besser, da deine Schleife ja mindest einmal durchlaufen wird. Und wenn die Datei leer ist ....
Also:
Delphi-Quellcode:
var fromf: textfile;
    speicher: string;
begin
  assigenfile(fromf, 'deine datei');
  reset(fromf);
  while not EoF(fromf) do begin
    readln(fromf, speicher);
    Memo.Lines.Add(speicher);
  end;
end;

MikeS 10. Feb 2004 15:10

Re: datei einlesen und in memo schreiben
 
ok da hast du recht!

dann sollten wir aber auch vorher noch prüfen ob die datei existiert!

Delphi-Quellcode:
[..]

if fileexists('deine Datei') then
begin
  // der rest von vorher
end;
oder mit einem OpenDialog1

Delphi-Quellcode:
if OpenDialog1.execute then
begin
  assignfile(fromf, OpenDialog1.filename);
  // der ...
end;
:mrgreen:

Tpercon 10. Feb 2004 15:16

Re: datei einlesen und in memo schreiben
 
Natürlich. :zwinker:

Zitat:

Zitat von jority
verschiedenen Rechnungen mit #10#13 voneinander getrennt sind.
so interpretiert Delphi dies nun als Dateiende was ja so nicht stimmt.

Das ist aber ein Zeilenumbruch und somit liegt das Fehlschlagen des Einlesens mittels LoadFromFile definitiv nicht daran.

jority 10. Feb 2004 15:17

Re: datei einlesen und in memo schreiben
 
oh man jungs ich liebe euch
so hat es wunderbar gefunzt jetzt kann ich endlich weiterarbeiten.

fettes DANKESCHÖN an euch!

gruß Jority

jority 11. Feb 2004 08:38

Re: datei einlesen und in memo schreiben
 
oh shit mir ist da jetzt ein grausamer Fehler aufgefallen.
ich habe mir das mal angesehen was im Memo steht und mir ist dabei aufgefallen das komplette Zeilen fehlen.
da diese Zeile zwischen #0A#00 und #0A stehen.
weiß jemand wie ich diese Datei einlesen kann um trotzdem alle zeilen im memo stehen zu haben.
Stichwort Binär einlesen?

gruß jority

Tpercon 11. Feb 2004 13:07

Re: datei einlesen und in memo schreiben
 
So ist das alles viel zu theoretisch was du hier an Infos bringst. Kannst du die Datei mit NotePad oder sonstwas korrekt öffnen?

Zitat:

Zitat von jority
#0A#00 und #0A stehen.

Was sollen das denn für Zeichen sein? Wie hast du diese denn ausgelesen bekommen?

jority 11. Feb 2004 13:34

Re: datei einlesen und in memo schreiben
 
so hier ein kurzer ausschnitt
da beginnt eine neue rechnung:

@START@ 078693 96611 TU

so das Problem ist das ganz am Anfang der Datei dieses noch mit eingelesen wird, dies aber später nicht mehr mit angezeigt wird.
wenn man das ganze im Hex anschaut dann sieht es so aus als würde an dieser Stelle eine komplett neue Datei stehen die dann bis zum nächsten:
@START@ 078693 96611 TU
geht.

irgendwie ist das ziemlich verwirrend und das scheit das memo bzw. delphi genauso zu sehen.
(mein arbeitskollege hat angeregt die datei binär einzulesen und dabei nach diesen zeichen zu suchen)

gruß jority

Christian Seehase 11. Feb 2004 16:01

Re: datei einlesen und in memo schreiben
 
Moin Jority,

Du könntest Die Datei, ähnlich wie's der Kollege vorgeschlagen hat, mit Hilfe von Hier im Forum suchenTFileStream in eine Stringvariable einlesen (Beispiele dazu solltest Du hier reichlich finden können), und dann mit mittels Hier im Forum suchenStringReplace die #00 aus dem String löschen. Anschliessend kannst Du den String dann der Eigenschaft Text des Memos zuweisen.

Bei grösseren Dateien müsstest Du die Datei dann sinnvoller Weise Blockweise einlesen, aber auch dafür kannst Du einen String als Buffer verwenden.

Ob die Verwendung von StringReplace auf die Performance drückt, so dass vielleicht ein anderes Verfahren angewendet werden sollte, müsstest Du mal testen.

BTW:
Der Zeilenvorschub wäre i.d.R. unter Windows #13#10 bzw #$0D#$0A. Nur #10 (bzw. #$0A) wäre in Windows nur in Ausnahmefällen oder bei Unixdateien anzutreffen.
Wird eine Datei die nur #10 als Zeilentrenner verwendet in eine StringList eingelesen (wie eben auch Memo.Lines) korrigiert Delphi dies intern auf #13#10.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 Uhr.

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