Einzelnen Beitrag anzeigen

Benutzerbild von Spiderpig_GER_15
Spiderpig_GER_15

Registriert seit: 17. Mär 2008
298 Beiträge
 
Delphi 7 Personal
 
#25

Re: TStringList bringt mich zum VerZweiFeln

  Alt 15. Sep 2008, 21:14
Hier jetzt verbessert:
Delphi-Quellcode:
unit MainCalcPart;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

  procedure VokCalc;

implementation

uses Frame;

procedure VokCalc;
var StrList: TStringList;
    iI, kI, lI, jI: Integer;
begin
  StrList:= TStringList.Create;
  Frame_1.SVoksToDo.Clear;
  StrList.Clear;

  randomize;

  //3 Neue Vokabeln
  for iI := 1 to 3 do
  begin
    If (Frame_1.LastVokIndex+1) <= Frame_1.OverAllVok then
    begin
      inc(Frame_1.LastVokIndex);
      Frame_1.SVoksToDo.Add(Frame_1.savestring[Frame_1.savestring.IndexOf('NR' + inttostr(Frame_1.LastVokIndex))+7]);
    end;
  end;

  //5 aus Aktueller Lektion
  for iI := 1 to Frame_1.OverAllVok do
  begin
    If (strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('NR'+ inttostr(iI)) + 5)]) = Frame_1.acuteLekt) then
    begin
      If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
      begin
        if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
        begin
          StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]);
        end;
      end;
    end;
  end;
  if StrList.Count >= 5 then
  begin
    Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1) div 5)]);
    Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1) div 5)+ (1*((StrList.Count) div 5))]);
    Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1) div 5)+ (2*((StrList.Count) div 5))]);
    Frame_1.SVoksToDo.Add(StrList[random((StrList.Count-1) div 5)+ (3*((StrList.Count) div 5))]);
    Frame_1.SVoksToDo.Add(StrList[random(((StrList.Count-1) div 5) + ((StrList.Count) mod 5)) + (4*((StrList.Count) div 5))]);
    StrList.Clear;
  end;

  //2 Problemfälle aus akt. Lektion
  for Ii := 1 to Frame_1.OverallVok do
  begin
    If (strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('NR'+ inttostr(iI)) + 5)]) = Frame_1.acuteLekt) then
    begin
      If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
      begin
        if Frame_1.savestring[Frame_1.savestring.IndexOf('Nr' + inttostr(iI)) + 1] = '1then
        begin
          if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
          begin
            if ((strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('NR' + inttostr(iI)) + 2])) /
                 (strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('NR' + inttostr(iI)) + 3]))) <
                   Frame_1.FailRatio then
            begin
              StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]);
            end;
          end;
        end;
      end;
    end;
  end;
  if StrList.Count >= 2 then
  begin
    iI:=random(StrList.Count);
    Frame_1.SVoksToDo.Add(StrList[iI]);
    repeat
      kI:=random(StrList.Count);
    until kI <> iI;
    Frame_1.SVoksToDo.Add(StrList[kI]);
  end;
  StrList.Clear;


  //3 Problemfälle aus letzten beiden Lektionen
  for iI := 1 to Frame_1.OverAllVok do
  begin
    If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('NR'+ inttostr(iI)) + 5)])) >= Frame_1.acuteLekt -2) and
            ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt) then
    begin
      If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
      begin
        if Frame_1.savestring[Frame_1.savestring.IndexOf('Nr' + inttostr(iI)) + 1] = '1then
        begin
          if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
          begin
            if ((strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('NR' + inttostr(iI)) + 2])) /
                 (strtofloat(Frame_1.savestring[Frame_1.savestring.IndexOf('NR' + inttostr(iI)) + 3]))) <
                   (Frame_1.FailRatio - 0.2) then
            begin
              StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]);
            end;
          end;
        end;
      end;
    end;
  end;
  if StrList.Count >= 3 then
  begin
    iI:=random(StrList.Count);
    Frame_1.SVoksToDo.Add(StrList[iI]);
    repeat
      kI:=random(StrList.Count);
    until kI <> iI;
    Frame_1.SVoksToDo.Add(StrList[kI]);
    repeat
      lI:=random(StrList.Count);
    until (lI <> iI) and (lI <> kI);
    Frame_1.SVoksToDo.Add(StrList[lI]);
  end;
  StrList.Clear;

  //2 Zufall

  for iI := 1 to Frame_1.OverAllVok do
  begin
    If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt) then
    begin
      If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
      begin
        if Frame_1.savestring[Frame_1.savestring.IndexOf('Nr' + inttostr(iI)) + 1] = '1then
        begin
          if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
          begin
            StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]);
          end;
        end;
      end;
    end;
  end;
  if StrList.Count >= 2 then
  begin
    iI:=random(StrList.Count);
    Frame_1.SVoksToDo.Add(StrList[iI]);
    repeat
      kI:=random(StrList.Count);
    until kI <> iI;
    Frame_1.SVoksToDo.Add(StrList[kI]);
  end;
  StrList.Clear;

  // Auffüllen etwaiger Lücken
  if Frame_1.SVoksToDo.Count < 15 then
  begin
    // 2 Zufall
    for iI := 1 to Frame_1.OverAllVok do
    begin
      If ((strtoint(Frame_1.savestring[(Frame_1.savestring.IndexOf('NR'+ inttostr(iI)) + 5)])) < Frame_1.acuteLekt) then
      begin
        If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
        begin
          if Frame_1.savestring[Frame_1.savestring.IndexOf('Nr' + inttostr(iI)) + 1] = '1then
          begin
            if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
            begin
              StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]);
            end;
          end;
        end;
      end;
    end;
    if StrList.Count > 0 then
    begin
      if Frame_1.SVoksToDO.Count = 1 then
      begin
        Frame_1.SVoksToDo.Add(StrList[random(StrList.Count)]);
      end
      else
      begin
        iI:=random(StrList.Count);
        Frame_1.SVoksToDo.Add(StrList[iI-1]);
        repeat
          kI:=random(StrList.Count);
        until kI <> iI;
        Frame_1.SVoksToDo.Add(StrList[kI-1]);
      end;
    end;
    iI:=15-Frame_1.SVoksToDo.Count;
    if (iI >= 1) and (Frame_1.LastVokIndex <= Frame_1.OverAllVok) then
    begin
    showmessage('wird ausgeführt');
      for jI := 1 to iI do
      begin
        If not (Frame_1.LastVokIndex > Frame_1.OverAllVok) then
        begin
          inc(Frame_1.LastVokIndex);
          If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(Frame_1.LastVokIndex))+7]) = (-1) then
          begin
            Frame_1.SVoksToDo.Add(Frame_1.savestring[Frame_1.savestring.IndexOf('NR' + inttostr(Frame_1.LastVokIndex))+7]);
          end;
        end
        else
        begin
          break;
        end;
      end;
    end;

    if (iI >= 1) and (Frame_1.LastVokIndex > Frame_1.OverAllVok) then
    begin
      for iI := 1 to Frame_1.OverAllVok do
      begin
        If Frame_1.SVoksToDo.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
        begin
          if Frame_1.savestring[Frame_1.savestring.IndexOf('Nr' + inttostr(iI)) + 1] = '1then
          begin
            if StrList.IndexOf(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]) = (-1) then
            begin
              StrList.Add(Frame_1.savestring[Frame_1.savestring.indexOf('NR' + inttostr(iI))+7]);
            end;
          end;
        end;
      end;
      for kI:=1 to (15 - Frame_1.SVoksToDo.count) do
      begin
        // lI:= random(StrList.Count)+1;
        Showmessage('gehhht');
        //=========>
        Frame_1.SVoksToDo.Add('geh doch, mannooo'); //mache ich es weg geht's, andernfalls der Error!
        //<=========
        //StrList.Delete(lI - 1);
      end;
      StrList.Clear;
    end
    else
    showmessage('ERROR');
  end;
  StrList.Clear;
end;
end.
Ist die makierte Zeile weg geht es, andernfalls nicht...
immer noch nicht
---Zufall ist das Inkognito Gottes---
  Mit Zitat antworten Zitat