![]() |
Problem mit writeln (Text erstellen)
Hallo Zusammen,
ich möchte in Delphi eine Text-Datei erstellen und die Abstände und zugehörige x, y Koordinaten sind drin, Format wie folgendes (nur Beispiel-->x, y: integer; MiniAbstand:real; x:0-9, y:0-19, also 10x20), ABER erste Zeile ("x y Abstand") wird in dieser Textdatei NICHT angezeigt x y Abstand 0 19 1.435 1 19 2.312 2 19 1.112 3 19 5.123 .. .. ... 8 19 1.231 9 19 3.123 0 18 2.123 1 18 6.123 2 18 2.345 3 18 1.234 .. .. ... 8 18 3.112 9 18 4.567 0 17 2.567 1 17 2.111 2 17 6.123 .. .. ... 9 17 7.123 0 16 2.678 1 16 3.345 2 16 3.890 .. .. ... .. .. ... 0 5 7.001 1 5 2.567 2 5 3.345 .. .. ... 9 5 1.113 0 4 2.123 1 4 3.321 .. .. ... 0 0 2.234 1 0 1.567 2 0 5.132 .. .. ... 7 0 7.123 8 0 1.127 9 0 2.980 Hier sind die Code
Delphi-Quellcode:
:
Type
TAbstand = record Nr: integer; Abs: real; end; . . . var Abstaende: array of array of TAbstand; . . . procedure TForm1.Button4Click(Sender: TObject); var MiniAbstand:real; Nummer:integer; i, j:integer; F:Textfile; begin AssignFile(F, 'List_Abstand.txt'); for i:=0 to 19 do begin for j:=0 to 9 do begin Nummer:=Abstand(MiniAbstand,Dreiecke); Abstaende[i,j].Nr:=Nummer; if Nummer > 0 then Abstaende[i,j].Abs:=MiniAbstand else Abstaende[i,j].Abs:=1000; Writeln(F,j,' ',19-i,' ',Abstaende[i,j].Abs); end; end; end; Funktion 'Abstand' ist von mir selbst geschrieben, hier j entspricht x in Textdatei, und i entspricht y. Compile ist ganz in Ordnung, ohne Fehlermeldung, ab wenn ich das Programm durchführte, bekommen ich "I/O Error 103", wo kann der Fehler liegen? Vielen Dank! Gruss Lee |
AW: Problem mit writeln (Text erstellen)
Du öffnest die Datei nirgends, du verbindest deine Variable F nur mit dem Dateinamen. Und wo du die erste Zeile schreiben willst, sehe ich auch nirgends.
Siehe Doku: ![]() Oder andere Seiten: ![]() |
AW: Problem mit writeln (Text erstellen)
Mit einer Stringliste ginge das einfacher.
|
AW: Problem mit writeln (Text erstellen)
Wenn ich Jaenicke noch etwas ergänzen dürfte,
das
Delphi-Quellcode:
fehlt ebenfalls.
CloseFile(f)
Ist (war) beliebte Fehlerursache für zu kurze Textdateien. @DeddyH Er will eben alle Funktionalitäten erlernen. Und für Log-Files gibt es meiner Meinung nach nichts besseres als Assignfile,append,writeln,closefile (ja das ist wohl kein Logfile, aber es hat zusehr gejuckt) Gruß K-H |
AW: Problem mit writeln (Text erstellen)
Zitat:
"nichts Einfacheres" würde stimmen, abgesehn von speziell dafür erstellen Klassen/Bibliotheken, also rein auf die "einfachen"/direkten Dateizugriffsfunktionen bezogen. "Besseres" gibt es alle Male, vom Caching her sind Streams besser und von der Funktionalität die spezialisierten Klassen. |
AW: Problem mit writeln (Text erstellen)
Wird zwar etwas OT aber warum
Zitat:
a) ich müßte bei Strings noch das CRLF hinterher schieben? b) sogar ohne
Delphi-Quellcode:
geht es (unter windows)ganz gut.
settextbuf
Liege ich da so falsch? Gruß K-H |
AW: Problem mit writeln (Text erstellen)
.. ich möchte dann mal die Folgende Klassen TStreamWriter
und TStreamReader in den Raum werfen. ![]() ![]() Grüße Klaus |
AW: Problem mit writeln (Text erstellen)
Zu kurz geworfen,in D7 unbekannt,
wie wäre es mit TStringStream ? aber da fehlt mir die Angabe der Datei aus der ich lesen will. Gruß K-H |
AW: Problem mit writeln (Text erstellen)
TStringStream + TFileStream
Text-Dateien haben auch ohne SetTextBuf schon einen komischen 128 Byte-Puffer. Das paßt nichtmal im Geringsten zur ClusterSize der Partitionen oder zur SectorSize der Datenträger. Beim Lesen ist ein Puffer OK, aber wozu beim Schreiben? Die Daten gehen sowieso nochmal durch die WFC (Windows File Cache ... das Teil, welches den RAM voll macht) und dann nochmal durch verschiedenste Caches. Wenn das Programm abstürtzt, sind diese Daten weg, was geade bei LogDateien etwas blöd ist, vorallem wenn man das Warum wissen will.
Delphi-Quellcode:
var
F: TextFile; B: Byte; // für LogDateien so klein wie möglich (0 ist leider nicht möglich) und ansonsten wäre es ein bissl größer nicht schlecht. begin AssignFile(F, 'Text.dat', CP_UTF8); // Ja, wir können jetzt sogar unicode, auch wenn die BOM nicht automatisch rein kommt. System.SetTextBuf(F, B); Rewrite(F); WriteLn(F, '123456'); CloseFile(F); |
AW: Problem mit writeln (Text erstellen)
Zitat:
Nach meinem Kenntnisstand wird der Buffer bei einem Closefile weggeschrieben, also seh ich da keine Gefahr des Datenverlustes (natürlich für jede Zeile das append,writeln,closefile) Was den Buffer angeht und den Tstream vielleicht komm ich am WE mal dazu etwas zu Teste ob es da signifikante Geschwindigkeitsunterschiede gibt. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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