![]() |
Textdatei zerlegen
Hallo,
ich habe eine Textdatei, in welcher jeweils in einer Zeile Punktnummer, x und y stehen. So etwas: 1 12,9 7,6 2 9,3 8,2 1235 5123,6 545671,0 Wie kann ich denn mit Pascal die Datei einlesen und jeweils die Punktnummer, x und y zu bekommen? Sowas wie scanf bei C. Danke! |
Re: Textdatei zerlegen
Anhand des Trennzeichens zerlegen. Möglich mit Hilfe von pos/posex(1), StrScan(2), oder StringList(3)
(1) Postion des 1 Trennzeichens mit Pos() ermittlen und des Zweitens mit Fundstelle1 + 1 als Startindex. (2) Strscan liefert nicht Position der Fundstelle sonder Zeiger auf Fundstelle. (3) .Delimiter auf trennzeichen und Zeile als .DelimitedTest zerlegt dir den string in Teilstrings |
Re: Textdatei zerlegen
Übrigens: alle Pascal-Dialekte - auch Delphi - verarbeiten Zahlen im nativen Format (Dezimalpunkt, nicht Komma) sehr effektiv:
Delphi-Quellcode:
Grüße vom marabu
{$APPTYPE CONSOLE}
uses SysUtils; var i: Integer; x, y: Extended; begin DecimalSeparator := '.'; // adjust output while not Eof do begin ReadLn(i, x, y); WriteLn(Format('%d %.1f %.1f', [i, x, y])); end; end. |
Re: Textdatei zerlegen
Hmmm, bei eof bekomme ich eine Exception:
--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt DAT2DTEST.exe ist eine Exception der Klasse EInOutError mit der Meldung 'E/A-Fehler 104' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe ---------------------------
Delphi-Quellcode:
Muß ich noch Assignfile noch was machen mit der Datei?
Procedure DAT2D.LoadFromFile(filename : string);
var i : Integer; x, y: Extended; F : TextFile; begin DecimalSeparator := ','; // adjust output AssignFile(F, filename); while not Eof(F) do begin ReadLn(F, i, x, y); AddOrReplace(x,y,i); end; end; |
Re: Textdatei zerlegen
Ich habe jetzt jinter den AssignFile eine Rest eingefügt, jetzt bekomme ich aber bei
ReadLn(F, i, x, y); eine --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt DAT2DTEST.exe ist eine Exception der Klasse EInOutError mit der Meldung 'Ungültige numerische Eingabe' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
Re: Textdatei zerlegen
Es fehlt das
Delphi-Quellcode:
nach AssignFile
Reset( f);
|
Re: Textdatei zerlegen
Beachte bitte, dass mein Code-Beispiel eine minimale Konsolenanwendung war. In einer GUI-Anwendung musst du tatsächlich AssignFile() und natürlich anschließend Reset() und CloseFile() benutzen:
Delphi-Quellcode:
Zur Erinnerung: das funktioniert nur, wenn deine Daten einen Dezimalpunkt verwenden! Grund dafür ist, dass die Standard-I/O-Routinen den Punkt fest eingebaut haben - Standard halt.
Procedure DAT2D.LoadFromFile(filename : string);
var i : Integer; x, y: Extended; F : TextFile; begin DecimalSeparator := '.'; // adjust output AssignFile(F, filename); Reset(F); while not Eof(F) do begin ReadLn(F, i, x, y); AddOrReplace(x, y, i); end; CloseFile(F); end; marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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