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
Antwort Antwort
Benutzerbild von Spiderpig_GER_15
Spiderpig_GER_15

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

Re: TStringList bringt mich zum VerZweiFeln

  Alt 15. Sep 2008, 20: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
Antwort Antwort


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 17:28 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