Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem (vieleicht) mit Subroutine
ebs - Fr 01.04.05 12:06
Titel: Problem (vieleicht) mit Subroutine
Hallo!
Ich habe ein kleines Programm geschrieben, dass aus diesem Format
Quelltext
1: 2:
| U10,1,1600, 950, 550, U10,1,1600, 475, |
ein zweidimensionalen String macht:
Jetzt möchte ich aber, dass nicht nur das erste 'U10' in einen String kommt, sondern beide(In dem Format können beliebig viele 'U10' drin vorkommen). Jetzt habe ich einfach eine Schleife drum gemacht, aber nicht Delphi streikt, sondern Windows wirft eine Fehlermeldung aus.
Kann mir jemand sagen, wo der Fehler ist?
Vielen Dank für Eure Hilfe!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure explode(S: String; C: Char; liste: array of TStringlist); Var I, J: Integer; begin if S = '' then exit; J := 1; for I := 1 to length(S) do if S[I] = C then begin Liste[x].Add(Copy(S, J, I-J)); J := I+1; end; Liste[x].Add(Copy(S, J, I-J)); end;
procedure TForm1.Button1Click(Sender: TObject); begin q:=tstringlist.create; q.loadfromfile('C:\1\Test.txta');
s22n := TStringList.Create; for x:=1 to q.count-1 do begin w:=copy(q[x-1],1,3); if w='S22' then S22n.add(q[x-1]); end;
s22[0] := TStringList.Create;
for x:= 0 to s22n.count-1 do Explode(s22n[0],',', s22[x]); s22[0].savetofile('C:\1\test.txt'); end; |
opfer.der.genauigkeit - Fr 01.04.05 12:37
Titel: Re: Problem (vieleicht) mit Subroutine
ebs hat folgendes geschrieben: |
.. ein zweidimensionalen String macht ..
.. sondern Windows wirft eine Fehlermeldung aus ..
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure explode(S: String; C: Char; liste: array of TStringlist); Var I, J: Integer; begin if S = '' then exit; J := 1; for I := 1 to length(S) do if S[I] = C then begin Liste[x].Add(Copy(S, J, I-J)); J := I+1; end; Liste[x].Add(Copy(S, J, I-J)); end;
procedure TForm1.Button1Click(Sender: TObject); begin q:=tstringlist.create; q.loadfromfile('C:\1\Test.txta');
s22n := TStringList.Create; for x:=1 to q.count-1 do begin w:=copy(q[x-1],1,3); if w='S22' then S22n.add(q[x-1]); end;
s22[0] := TStringList.Create;
for x:= 0 to s22n.count-1 do Explode(s22n[0],',', s22[x]); s22[0].savetofile('C:\1\test.txt'); end; | |
Hab deinen Code überflogen. Abgesehen davon, daß dir so Kleinigkeiten wie die Deklaratin der Variable x in der Explode- Prozedure fehlt und ein
paar andere Deklarationen auch nicht zu finden sind, weiß ich nicht mal, wo da ein "zweidimensionaler Array" sein soll. :roll:
Soll nicht angreifend wirken..
Die Fehlermeldung würde mich interessieren. :)
//Edit: sowas ähnliches wie "access violation"?
ebs - Fr 01.04.05 13:05
Da sind mir wirklich einige Fehler unterlaufen, da ich schon ein bisschen experimentiert habe. Hier mal der Code der läuft;
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| var Form1: TForm1; q:Tstringlist; x:integer; w:string; u10n:tstringlist; u10:array[0..500] of tstringlist;
implementation
{$R *.DFM}
procedure explode(S: String; C: Char; liste: array of TStringlist); Var I, J: Integer; begin if S = '' then exit; J := 1; for I := 1 to length(S) do if S[I] = C then begin Liste[x].Add(Copy(S, J, I-J)); J := I+1; end; Liste[x].Add(Copy(S, J, I-J)); end;
procedure TForm1.Button1Click(Sender: TObject); begin q:=tstringlist.create; q.loadfromfile('C:\1\Test.nh');
s22n := TStringList.Create; for x:=1 to q.count-1 do begin w:=copy(q[x-1],1,3); if w='U10' then U10n.add(q[x-1]); end;
U10[0] := TStringList.Create;
Explode(U10[0],',', U10[x]); U10[0].savetofile('C:\1\test.txt'); end;
end. |
Die Fehlermeldung ist so:
Zugriffsverletzung bei Adresse 00429A26 in Modul 'Projekt1.exe' Lesen von Adresse 0000BD45
opfer.der.genauigkeit - Fr 01.04.05 13:19
Zitat: |
Zeile44: Explode(U10[0],',', U10[x]); // String->List
|
Das mekert der Compiler nicht an? Immerhin ist U10[0] eine StringList und der Explodparameter erwartet nen string. :gruebel:
Die Fehlermeldung ist eine Speicherbereichsverletzung.
D.h. ich würde, wenn ich du wäre mal in aller Ruhe selber debuggen und nach solchen Sachen wie "einhalten der arraybereiche" prüfen.
Einfach mal selber suchen, in welchem Teil des Codes der Fehler auftaucht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!