AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TStringList bringt mich zum VerZweiFeln
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList bringt mich zum VerZweiFeln

Ein Thema von Spiderpig_GER_15 · begonnen am 15. Sep 2008 · letzter Beitrag vom 16. Sep 2008
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz