Hallo liebe Wissenden,
ich habe ein Problem bei der Kürzung von Strings mit einer von mir geschriebenen Funktion.
Ich habe ein .txt-File mit 3006 Zeilen. Dieses hab ich in eine Stringlist geladen. Der Anfang des Files sieht so aus:
MIN=0 -10 0
MAX=60 10 25
SCALE=10 5 10
DEC=2 2 2
DEF="Zeit" t / s "Spannung" U\_A1 / V "Frequenz" f / Hz
0 0,105 NAN
0,02 0,11 NAN
0,04 0,105 NAN
0,06 0,105 NAN
0,08 0,105 NAN
0,1 0,105 NAN
0,12 0,105 NAN
0,14 0,105 NAN
0,16 0,105 NAN
0,18 0,105 NAN
0,2 0,105 NAN
Das was ich eigentlich nur brauche ist die zweite Spalte, also habe ich die ersten 5 Zeilen direkt aus der Stringlist gelöscht und die Stringlist an ein Array übergeben, damit ich an die einzelnen Zeichen komme(habe zumindest nichts darüber gefunden, ob man bei Stringlists auch auf Zeichen zugreifen kann).
Ich habe also jetzt die Stringlist DataFile mit den Strings 0 bis 3000
und ein dynamisches Array DatenZeilen, das auch von 0 bis 3000 geht. Soweit kein Problem.
Jetzt will ich die zweite Spalte quasi aus den Strings separieren. Dazu habe ich folgende Funktion geschrieben:
function StringVerkleinern(Zeichenkette: String): String;
var i, j: Integer;
begin
j := 1;
Zeichenkette := StringReplace(Zeichenkette,#9,#32,[rfReplaceAll]);
//Die Leerzeichen zwischen den Spalten sind gar keine Leerzeichen
//sondern Tab-Stops.
for i := 1 to Length(Zeichenkette) do
if Zeichenkette[i] #32 then
inc(j)
else
begin
Delete(Zeichenkette,1,j);
Break
end;
//bis zur zweiten Spalte löschen
j := 1;
for i := 1 to Length(Zeichenkette) do
if Zeichenkette[i] #32 then
inc(j)
else
begin
Delete(Zeichenkette,i,j);
Break
end;
//ab der zweiten Spalte löschen
Result := Zeichenkette
end;
Ist wahrscheinlich nicht die eleganteste Lösung, aber funktioniert…bis auf die letzte Zeile.
Der String[3000] sieht folgendermaßen aus:
60 0,105 NAN
String[2999] sieht zum Beispiel so aus:
59,98 0,105 NAN
Eigentlich sollte es genauso wie beim Rest funktionieren, aber Delphi sagt mir beim Ausführen der Schleife
for i := 0 to DataFile.Count - 1 do
DatenZeilen[i] := StringVerkleinern(DatenZeilen[i]);
‚Zugriffsverletzung bei Adresse 00404324 in Modul ‚funk_uhr.exe‘. Lesen von Adresse 0000000E.‘
Was das zu bedeuten hat weiß ich nicht, wenn ich aber die Schleife nur bis DataFile.Count - 2 laufen lasse, dann meckert Delphi nicht.
Sage ich dann anschließend
DatenZeilen[3000] := StringVerkleinern(DatenZeilen[3000]);
kommt die gleiche Fehlermeldung. Im Debugmodus in einzelnen Anweisungen ausgeführt, kommt Delphi nur bis zum ‚begin‘ der Funktion. Nocheinmal F7 gedrückt und ich erhalte die Fehlermeldung.
Bei der Datei die ich hier habe ist es kein Problem, wenn ich den letzten String nicht habe, aber bei einer anderen Datei könnte es evtl problematisch werden (das sind alles Messwerte).
Vielen Danke schonmal für eure Antworten.
MfG,
Sven