Zählen von Datensätzen in einer Zeile

StefMont

Grünschnabel
Hallo,
ich habe folgendes Problem: ich habe ein Pascal Programm geschrieben und bin nun dabei, aus einer Textdatei die Anzahl der Zeichen in der Kopfzeile auszulesen.
Die Zeile hat folgendes Format:
88 660629 5047220 30.9034 27.4 2 3.7
Ich benötige die Anzahl der Spalten, da diese von Datei zu Datei verschieden sind und in einer späteren Prozedur als Laufvariable genutzt werden soll.
Ich habe folgendes versucht: Ich habe nach Leerzeichen gesucht bis zum Ende der Zeile, allerdings nicht mit durchschlagenden Erfolg:

begin
l:=0;
while not eoln(input) do
begin
read(input,line);
if pos('',line)=0 then
l:=l+1;
end;
end;


Was muss ich verändern um die korrekte Anzahl zu erhalten?

Vielen Dank schon mal im Voraus!
 
1. Wenn du nach einem Leerzeichen suchst dann mußt auch eins zwischen den beiden Anführungszeichen stehen.

2. Mit PosEX kannst du von einer Position weiter suchen.
Pos findet so immer nur die selbe Stelle (die ist übrigens die Position des Leerzeichens und daher wohl > 0)

versuch es mal etwa so:

...
zeilelesen;
...
lastpos :=1;
anzahlSpalten:=1;
while lastpos>0 do begin
lastpos = PosEx( ' ', line, laspost);
inc(AnzahlSpalten);
end;
// AnzahlSpalten enthält nun die Anzahl der Spalten in dieser Zeile

hoffe das hilft weiter
vop
 
Befehl PosEx

Hallo vop,
vielen Dank für Deine Antwort.
Ich habe probiert, es so in mein Programm einzubauen, wie Du es mir gesagt hast. Leider existiert bei meiner TP-Version der Befehl PosEx nicht.
Hättest Du vielleicht eine Alternatividee parat?
Wäre Dir sehr dankbar für eine Antwort.

Bis bald


SteMont
 
Noch immer Schwierigkeiten

Hallo zusammen,
ich habe noch immer Schwierigkeiten, das oben angesprochene Problem zu lösen. Ich wäre für jegliche Hilfe/Antwort/ Ratschlag sehr sehr dankbar!

Mit besten Grüssen

StefMont
 
Du kannst PosEx simulieren, indem die
Pos verwendest und immer nur mit dem Rest weitersuchst.
// In etwa so (ist nicht auf Fehler geprüft sondern nur so runtergeschrieben)
//
AnzLeerzeichen:=0;
StrHelp := line;
while StrHelp>'' do begin
NumPos := Pos( ' ', line); // Position des ersten Leerzeichens
if NumPos < 0 then begin
StrHelp:=''; // Kein Leerzeichen mehr da
end else begin
inc(AnzLeerzeichen);
// weiter nach dem letzten Leerzeichen
StrHelp := copy(StrHelp,NumPos+1, Length(StrHelp));
end;
end;
// AnzLeerzeichen sollte nun die Anzahl der Leerzeichen in deiner Zeile haben
// Dh. es sind AnzLeerzeichen + 1 Spalten

vop
 
Zurück