Einzelnen Beitrag anzeigen

Benutzerbild von Spiderpig_GER_15
Spiderpig_GER_15

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

Re: TStringList bringt mich zum VerZweiFeln

  Alt 15. Sep 2008, 21:26
da das vermutlich auch nciht weiter hilft, hier die ganze Unit:
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
  begin
    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;
  end;

  //5 aus Aktueller Lektion
  begin
    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;
    begin
      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;
    end;
  end;

  //2 Problemfälle aus akt. Lektion
  begin
    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;
    begin
      if StrList.Count >= 2 then
      begin
        iI:=random(StrList.Count);
        Frame_1.SVoksToDo.Add(StrList[iI]);
        repeat
          kI:=random(StrList.Count);
          Frame_1.SVoksToDo.Add('es geht');
        until kI <> iI;
        Frame_1.SVoksToDo.Add(StrList[kI]);
      end;
    end;
    StrList.Clear;
  end;


  //3 Problemfälle aus letzten beiden Lektionen
  begin
    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;
    begin
      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;
    end;
    StrList.Clear;
  end;

  //2 Zufall
  begin
    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;
    begin
      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;
    end;
    StrList.Clear;
  end;


  // Auffüllen etwaiger Lücken
  if Frame_1.SVoksToDo.Count < 15 then
  begin
    // 2 Zufall
    begin
      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;
      begin
        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;
        begin
          iI:=15-Frame_1.SVoksToDo.Count;
          if iI >= 1 then
          begin
            begin
              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
                  else
                  begin
                    break;
                  end;
                end
                else
                begin
                  break;
                end;
              end;
              If (Frame_1.LastVokIndex > Frame_1.OverAllVok) then
              begin
                //Zufälllig
                begin
                  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;
                  begin
                    for kI:=1 to (15 - Frame_1.SVoksToDo.count) do
                    begin

                        lI:= random(StrList.Count)+1;

                        //darum geht's: mache ich die Kommentarzeichen weg, ensteht der error!
                        // Frame_1.SVoksToDo.Add('buhuuu');
                       
                    end;
                  end;
                  StrList.Clear;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
    StrList.Clear;
  end;
end;
end.
um wenigstens etwas helfen zu können: Es geht um einen Vokabeltrainer, Das ganze ist dafür da um die "Abzufragenden" Vokabeln zusammen zu stellen.

MfG

Spiderpig
---Zufall ist das Inkognito Gottes---
  Mit Zitat antworten Zitat