Lernauftrag mit diversen problemen (Delphi)

@

@milhouse

moin,
ok, ich häng es wieder an ;-)

danke auch für die schnelle hilfe, ich werds gleich mal anwenden
es geht leider nicht :-( folgende fehlermeldung:

Project zensur.exe raised exception class EStringListError with message "List index aut of bounds (0)". Pricess stopped. Use Step or Run to continue.

cu
milhouse
PS: bis mittwoch (abgabetermin) wird das schon noch was
 

Arne Buchwald

Erfahrenes Mitglied
Hallo @milhouse,

ups, dummer Fehler! Ich habe die rotmarkierte Zeile vergessen, in der die Datei in die StringList geladen wird.

Code:
procedure TForm1.Button1Click(Sender: TObject);
const Anzahl : integer = 20;
var sl: TStringlist;
    i : integer;
begin
  if OpenDialog1.Execute then
  begin
    sl := TStringList.Create;
    sl.LoadFromFile(OpenDialog1.Filename);
    for i:=1 to Anzahl do
    begin
      TEdit(FindComponent('Edit'+IntToStr(i))).Text:= sl.Strings[i-1];
    end;
    sl.free;
  end;
end;
 
@

@milhouse

juhu, es geht :)

aber neues problem: ich will eine schleife erstellen

if strtoint(TEdit(findcomponent('edit'+inttostr(i))).text) <> 0 then
bis hier gehts
begin (findcomponent('z'+inttostr(i))) {hier is fehler}
:= strtoint(TEdit(findcomponent('edit'+inttostr(i))).text);

will proktisch z1,z2,z3 usw. haben
das edit1,edit2 usw geht ja immerhin schon...

cu
milhouse
 

Arne Buchwald

Erfahrenes Mitglied
Hallo,

ich kann dir im Moment nicht ganz folgen, was du möchtest. Schreibe am Besten in normalen, deutschen, meinetwegen auch englischen, Sätzen auf, was du willst. Dann kann ich dir sicherlich schneller helfen ....
 
@

@milhouse

moin,
ok, war bisschen kauderwelsch

ich will mit einer for schleife die variable z verwenden
ich könnte auch z1 := irgendwas, z2:= aus irgendwas schreiben, aber wenn ich das 10mal mache is das ziehmlich aufwendig

daher will ich eine for schleife verwenden
for i := 1 to 10 do z(i)irgendwas;

das problem ist dass ich z nicht mit i kombinieren kann

so sieht mein code in etwa aus:

for i := 1 to 7 do
('z'+inttostr(i)) := strtoint(TEdit(findcomponent('edit'+inttostr(i))).text);

ich hoffe es ist jetzt verständlicher
es funktioniert auch ohne schleife, aber ich könnte etwa 30% quellcode sparen

cu
milhouse
 
@

@milhouse

moin,

hier der lange code, der gekürzt werden soll
die if schleifen kann man ja eigenlich auch mit ner schleife machen
q ist der quotient für den durchschnitt

if strtoint(edit1.Text) <> 0 then begin z1:= strtoint(edit1.Text);
q1 := 1;
end;
if strtoint(edit2.Text) <> 0 then begin z2:= strtoint(edit2.Text);
q1 := 2;
end;
if strtoint(edit3.Text) <> 0 then begin z3:= strtoint(edit3.Text);
q1 := 3;
end;
if strtoint(edit4.Text) <> 0 then begin z4:= strtoint(edit4.Text);
q1 := 4;
end;
if strtoint(edit5.Text) <> 0 then begin z5:= strtoint(edit5.Text);
q1 := 5;
end;
if strtoint(edit6.Text) <> 0 then begin z6:= strtoint(edit6.Text);
q1 := 6;
end;
if strtoint(edit7.Text) <> 0 then begin z7:= strtoint(edit7.Text);
q1 := 7;
end;


if strtoint(edit9.text) <> 0 then
klausur1 := (strtoint(edit8.Text)+ strtoint(edit9.text))/2
else
klausur1 := strtoint(edit8.text);

if klausur1 <> 0
then
if z1 = 0
then
schnitt1.text := floattostr(klausur1)
else
schnitt1.text := floattostr(((z1+z2+z3+z4+z5+z6+z7 )/(q1) + (klausur1))/2)
else
schnitt1.text := floattostr((z1+z2+z3+z4+z5+z6+z7)/(q1));

end;


mein versuch, der nicht geht:
{for i := 1 to 7 do
begin
if strtoint(TEdit(findcomponent('edit'+inttostr(i))).text) <> 0 then
begin ('z'+inttostr(i)) := strtoint(TEdit(findcomponent('edit'+inttostr(i))).text);
q1 := i;
end;
end;}
 

Neue Beiträge