Autor Beitrag
ebs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
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.
BeitragVerfasst: Fr 01.04.05 12:06 
Hallo!
Ich habe ein kleines Programm geschrieben, dass aus diesem Format
ausblenden Quelltext
1:
2:
U10,1,1600,  950, 550,
U10,1,1600,  475,

ein zweidimensionalen String macht:
ausblenden Quelltext
1:
U10[0][1]=1					

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!

ausblenden volle Höhe 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                               //<--------------------Schleife
Explode(s22n[0],',', s22[x]); // String->List

s22[0].savetofile('C:\1\test.txt');
end;
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Fr 01.04.05 12:37 
user profile iconebs hat folgendes geschrieben:


.. ein zweidimensionalen String macht ..
ausblenden Quelltext
1:
U10[0][1]=1					


.. sondern Windows wirft eine Fehlermeldung aus ..

ausblenden volle Höhe 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                               //<--------------------Schleife
Explode(s22n[0],',', s22[x]); // String->List

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"?

_________________
Stellen Sie sich bitte Zirkusmusik vor.
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
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.
BeitragVerfasst: 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;

ausblenden volle Höhe 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..500of 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;

//for x:= 0 to u10n.count-1 do
Explode(U10[0],',', U10[x]); // String->List
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: 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.

_________________
Stellen Sie sich bitte Zirkusmusik vor.