Autor |
Beitrag |
ebs
      
Beiträge: 213
Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
|
Verfasst: Fr 01.04.05 12:06
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:
Quelltext
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!
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
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: Fr 01.04.05 12:37
ebs hat folgendes geschrieben: |
.. ein zweidimensionalen String macht ..
Quelltext
.. sondern Windows wirft eine Fehlermeldung aus ..
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.
Soll nicht angreifend wirken..
Die Fehlermeldung würde mich interessieren.
//Edit: sowas ähnliches wie "access violation"?
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
ebs 
      
Beiträge: 213
Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
|
Verfasst: 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;
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
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: 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.
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.
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
|