Autor Beitrag
rizor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: Mo 16.10.06 18:20 
Hi,

ich bekomme bei meinem Prog eine EAccessViolation.

ausblenden 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:
procedure TForm1.ausschreiben(am:integer);
var
  c,e,i:integer;
  sl:TStringList;
  b,exp:string;
begin
  for i:=0 to am do
  begin
    sl.Delimiter:='^';
    sl.DelimitedText:=a[i];
    for c:=0 to length(sl[0]) do
    begin
      if string(sl[0][c])<>'x' then
        b:=b+sl[0][c];
    end;
    e:=StrToInt(sl[1]);
    for c:=0 to e do
    begin
      exp:=exp+'*x';
    end;
    a[i]:=b+exp;
    b:='';
    exp:='';
    sl.free;
  end;
end;


Woran liegt das?
Dass Programm soll x^2 in x*x umwandeln.
Das für eine bestimmte Anzahl an arrays.

2. Frage wie kann ich string(sl[0][c])<>'x' so umschreiben, dass ich sage er soll
die anweisung der b:=b+sl[0][c]; dann solange ausführt bis ein buchstabe in sl erscheint?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 16.10.06 18:34 
bevor du sl verwenden kannst solltest du das objekt aber auch anlegen!

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
rizor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: Mo 16.10.06 18:50 
Stimmt.

Habe jetzt einen neuen Fehler.

im projekt funktion.exe ist eine Exception der Klasse EStringListError it der Meldung 'Listenindex überschreitet Maximum (0)' aufgetreten.

Gibt er mir aus.

Wieso?
Was bedeutet Listenindex?
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 16.10.06 19:12 
Hallo,

naja du greifst auf ein Element zu, dass nicht existiert (überschreitet das Maximum 0, die Liste ist also leer). Ich vermute, dass kommt aus Zeile 11, wo du auf das nullte Element zugreifst.

Übrigens: Du könntest einfach mal deinen Quelltext debuggen, bevor du hier fragst. So ein Fehler lässt sich recht einfach finden :/

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
rizor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: Mo 16.10.06 19:16 
Habe ich ja, aber ich kann das Problem nicht beheben.

Wie soll ich sonst auf das 0. element zugreifen ein sl fängt ja an bei 0 zu zählen, oder?
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mo 16.10.06 19:24 
user profile iconrizor hat folgendes geschrieben:
Habe ich ja, aber ich kann das Problem nicht beheben.

Wie soll ich sonst auf das 0. element zugreifen ein sl fängt ja an bei 0 zu zählen, oder?
Lesen bitte? Ich schrieb, die Liste ist leer!! Also zuerst mal überprüfen ob die Liste 1 Element hat (SL.Count >= 1) bevor du auf das nullte Element zugreifst!

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
rizor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 209

WIN XP
Delphi 2005 PE, Visual C++
BeitragVerfasst: Mo 16.10.06 19:39 
aber es gibt auf jeden fall sl[0] und sl[1], da es ein einfacher parser werden soll
also a[i] hat zum beispiel 24x^2 das heißt sl[0] muss 24x und sl[1] 2 sein.

hab dich falsch verstanden.
habe es jetzt eingebaut.
ausblenden 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:
procedure TForm1.ausschreiben(am:integer);
var
  c,e,i:integer;
  sl:TStringList;
  b,exp:string;
begin
  for i:=0 to am do
  begin
    sl:=TStringList.Create;
    sl.Delimiter:='^';
    sl.DelimitedText:=a[i];
    if sl.count>=1 then
    begin
      for c:=0 to length(sl[0]) do
      begin
        if string(sl[0][c])<>'x' then
          b:=b+sl[0][c];
      end;
      e:=StrToInt(sl[1]);
      for c:=0 to e do
      begin
        exp:=exp+'*x';
      end;
      a[i]:=b+exp;
      b:='';
      exp:='';
      sl.free;
    end;
  end;
end;


Nun habe ich das Problem das in Meiner hauptprozedur nicht mehr klappt. also die ausgabe eines bestimmten arrays.
wieso?