Autor Beitrag
Dafduf
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 22.05.06 18:22 
hi alle zusammen.
hab folgendes problem:
hab eine textdatei mit Wertetabelle drin:
x f(x)
1 2
2 4
3.5 2.1

möchte nun diese Daten laden und in eine eigene Tabelle im Programm speichern.
bisher bin ich so vorgegangen:
- lesen der daten mit readln
dabei entsteht ein string in der steht z.b. für
zeile 1: string = '1 2'.
- anschliessend bearbeiten der string(alle leerstellen
löschen) und teilen in zwei strings, dabei entsteht für
zeile 1: string1 = '1' und string2 = '2'.
Meine Frage nun, gibt es einen befehl, der automatisch gleich eine leerstelle erkennt und nur solange einliest bis diese erreicht ist?

ausserdem ist mir aufgefallen, sind 2 Zahlen in einer Zeile über Tabulator voneinander getrennt, erkennt er die Leerstellen dazischen nicht beim einlesen, und klatscht einfach die zweite zahl an die erste ran
(für zeile 1 ergibt sich z.b. ein string = '12' und nicht
string = '1 2')
warum?

hoffe ihr könnt mir helfen, vielen dank.
Arno Nym
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Mo 22.05.06 19:07 
Hi!
Also das automatische einlesen bis Leerzeichen oder Tab funktioniert nur wenn du die read Methode mit einem Integerwert aufruftst. Das funktioniert dann Variablenweise und nicht Zeilenweise. Da du aber sicherlich auch Real-werte in den Dateien drinstehen hast, musst du selbst die Einleseroutine schreiben.
Der Tabulator hat dann nicht den selben ASCII-Wert wie ein Leerzeichen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var str : String;
begin;
 str := '';
 str := str + Chr(9);
 Showmessage(InttoSTr(Ord(str[1]))); //ASCII Code Tabulator = 9 (dezimal)
 str := ' ';
 Showmessage(InttoSTr(Ord(str[1]))); //ASCII Code Leerzeichen = 32 (dezimal)
end;


Probier einfach mal beim zeichen-weisen Durchgehen der readline nur Zeichen mit dem Ordinaltyp von Zahlen bzw Komma oder Plus/Minus durchzulotsen und das als String zusammenzufügen.
Wenn du den String nachher per "StrtoFloat" konvertieren willst musst du beachten dass es dort nur Kommata , keine Punkte gibt. Also brauchst du gegebenenfalls noch ne Hilfsfunktion wie:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
Function getreal(strin:String):Real;
begin;
 IF Pos('.',Strin) > 0 then begin;
  Strin := Copy(Strin,1,Pos('.',Strin)-1) + ',' + Copy(Strin,Pos('.',Strin)+1, length(Strin) - Pos('.',Strin));
 end;
 Zahl2 := StrtoFloat(Strin);
end;


MFG Arno Nym

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt