Thema: Delphi ReadLn und WriteLn

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: ReadLn und WriteLn

  Alt 5. Dez 2006, 08:41
Zitat von Mjöllner:
Mir gind es bei dieser Frage bloß mehr um das Verständnis des Problems und nicht um die Lösung! Wie schon oben erwähnt, hab ich das Problem bereits gelöst.
Also wenn mir einer erklären kann, warum das mit den Leerzeichen so ist, dann bitte posten!
HI,
ich würde dir echt dazu raten die Tipps zu beherzigen, die dir hier gegeben wurden. Es ist mit anderen Lösungen für dich möglich die Daten sowohl komfortabel per hand zu bearbeiten als auch einfach (und fehlerfrei) im Programm die Daten einzulesen.

Zu deinem eigentlichen Problem solltest du dir einfach nur anschauen, was du verwendest. Du hast eine Textdatei, alles was hier drin steht sind einfache Zeichenketten. Genauso wird Delphi diese auch interpretieren, ob eine Datei nun ein Wort oder 10 oder 100 enthält, für Delphi besteht die Datei aus einem langen String. Anhand der Leerzeichen (nur ein spezielles Zeichen im String) kann man hier trennen, man könnte aber auch ein Komma nehmen oder ein 'F' oder oder oder. Letztlich passiert immer das gleiche, man sucht im String nach einem Zeichen und teilt hier die Zeichenkette auf.
Wenn du nur Werte in die Datei schreibst, dann weiß Delphi nicht dass es sich für dich dabei um getrennte Integer Werte handelt, für Delphi sind das einfache Strings und die können aneinander gehängt werden. Endet ein String mit dem Zeilenumbruch (oder startet einer damit) würde es für dich im Editor wie eine neue Zeile aussehen, für Delphi ist das weiterhin ein String, der halt an dieser Stelle ein besonderes Zeichen besitzt an dem man trennen kann.
Das Textfile besitzt hier (um flexibel zu bleiben) keine eigenen Logik. Du kannst daraus eine CSV Datei bauen in dem du zwischen den Variablen einfach ein Trennzeichen einfügst, du kannst aber auch mehrere Zeilen übergeben (die mit einem Zeilenumbruch enden) und da brauchst du jeweils kein Leerzeichen zwischen zwei Einträgen. Dass du es jetzt für deine Integer möchtest, das weiß Delphi nicht. Du lädst irgendeine Textdatei und da steht nun mal nur irgendein Text drin.

Sauberer ist es deswegen (und weil File nicht mehr aktuell ist) auf eine andere Implementierung zu setzen, z.B. könntest du alle Werte an eine TStringList übergeben, einen Delimiter verwenden und den hier generierten Text direkt speichern und auch wieder laden. Das zerlegen der Werte (und/oder einfügen von Trennzeichen) übernimmt dann schon die TStringList für dich. Natürlich wären auch die anderen schon genannten Lösungen besser als deine jetzige (sorry, aber ist so)
  Mit Zitat antworten Zitat