Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Listbox: Inhalt formatierter Zeilen auf Variablen verteilen (https://www.delphipraxis.net/78804-listbox-inhalt-formatierter-zeilen-auf-variablen-verteilen.html)

Silentium 11. Okt 2006 10:53


Listbox: Inhalt formatierter Zeilen auf Variablen verteilen
 
Morgen Leute,
ich habe folgendes Problem: Ich habe in einer Textdatei mehrere Zeilen an Text stehen, der so formatiert
ist:

Spanische Vokabel [TAB] deutsche Vokabel

Diese Textdatei lade ich in eine Listbox. Nun möchte ich, mit Hilfe eines Algorithmus, von einer
zufällig aufgewählten Zeile die spanische Vokabel in eine Variable, die deutsche in eine andere Variable
geschrieben haben.
Meine Idee dazu:

Delphi-Quellcode:
...

type
  TStringArray = Array[0..1] of string;

...

function Zufallsaufgabe(ListBox:TListBox):TStringArray;
  var zufallszahl,Listboxzeilen,i:integer;
      zeile,spanisch,deutsch:string;
      nochspanisch:boolean;
      return:TStringArray;
  Begin
    randomize;
    nochspanisch := true;
    deutsch := '';
    spanisch := '';

    listboxzeilen := Listbox.Count;
    zufallszahl := Random(listboxzeilen-1);
    zeile := Listbox.Items.Strings[zufallszahl];

    for i := 0 to (length(zeile)-1) do begin
      if zeile[i] = chr(9) then //wenn dieses Zeichen TAB ist, dann folgt die deutsche Vokabel
        nochspanisch := false
      else begin
        if nochspanisch = true then
          spanisch := spanisch + zeile[i]
        else
          deutsch := deutsch + zeile[i];
      End;
    End;

    return[0] := spanisch;
    return[1] := deutsch;

    result := return;
End;

...

procedure TForm1.Button1Click(Sender: TObject);
  var aufgabe:TStringArray;
  begin
    aufgabe := Zufallsaufgabe(ListBox1);
    Edit1.Text := aufgabe[0]+' '+aufgabe[1];
end;
Mein Problem hierbei: Die Edit bleibt leer.
Bitte hülft mir ;)

Danke im Voraus
Silentium

Zacherl 11. Okt 2006 11:18

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Hi,

Delphi-Quellcode:
RandomStr := ListBox1.Items[Random(ListBox1.Items.Count -1)];
Spanisch := Copy(RandomStr, 1, pos(Char(VK_TAB), RandomStr));
Deutsch := Copy(RandomStr, pos(Char(VK_TAB), RandomStr) + 1, length(RandomStr));
So geht es :thumb: RandomStr, Spanisch und Deutsch sind String Variablen, die du in der Methode deklarieren musst. Auch solltest du z.B. im OnCreate Ereigniss des Formulars einmal Randomize aufrufen.

Florian

Tormentor32 11. Okt 2006 11:21

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Geht random nicht sowieso von 0 bis zum Wert-1, soll heißen ist das "-1" bei "ListBox1.Items.Count -1" nicht überflüssig?

edit: Rechtschreibfehler

Zacherl 11. Okt 2006 11:22

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Nein Random geht von 0 bis zum Wert des Parameters ... und bei einem Item in der ListBox ist Count = 1, aber die Referenz auf ein Item (ListBox1.Items[Index]) ist immer eins weniger (d.h. das erste Item wird mit 0 angesprochen), deswegen -1.

(Habe den Code nochmal editiert und getestet, jetzt geht er. Allerdings wird in meiner ListBox für einen Tabulator nur ein Viereckiges Kästchen angezeigt ...
@Silentium: Also wenn der Benutzer die Listbox sowieso nicht sehen soll - wovon ich ausgehe, da die Tabs doch sehr unschön aussehen -, würde ich eine TStringList zum Laden der Textdatei verwenden)

Tormentor32 11. Okt 2006 11:24

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Hmm ich dachte random(256) bedeutet minimaler Wert = 0, maximaler Wert = 255

Zacherl 11. Okt 2006 11:25

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Meines Wissens nach ist in deinem Falle der Minimalwert 0 und der Maximalwert 256 ...
Und mein Code funktioniert auch, wenn sich nur ein Item in der ListBox befindet, also Random(0) = 0 sein muss ... daher wird es wohl so sein, wie ich es dachte ...

Silentium 11. Okt 2006 11:28

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Danke, jetzt funktionierts. Werde mich zwar nochmal mit der Copy Funktion auseinandersetzen müssen, um's auch zu verstehen...

Danke für die Hilfe :)

Und wegen Random:

Random(12) heißt: min=0, max=12

Gruß Silentium

Zacherl 11. Okt 2006 11:31

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Zitat:

Zitat von Silentium
Danke, jetzt funktionierts. Werde mich zwar nochmal mit der Copy Funktion auseinandersetzen müssen, um's auch zu verstehen...

Bitte ... Copy(Val, Von, Count) gibt "Count" Zeichen ausgehend von "Von" der Value "Val" zurück. Fals auch unklar: Pos(SubStr, Str) gibt die Position von SubStr in Str an.

Zitat:

Zitat von Silentium
Und wegen Random:

Random(12) heißt: min=0, max=12

Ja musste ja so sein, sonst hätte mein Code mit nur einem Item in der Listbox gar nicht funktionieren können.

Florian

Silentium 11. Okt 2006 11:34

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Danke für die Info :)

Aber ne kleine Veränderung musste aber dennoch rein, damit das TAB nicht angezeigt wird:

Delphi-Quellcode:
RandomStr := ListBox1.Items[Random(ListBox1.Items.Count -1)];
Spanisch := Copy(RandomStr, 1, pos(Char(VK_TAB), RandomStr)-1);
Deutsch := Copy(RandomStr, pos(Char(VK_TAB), RandomStr) + 1, length(RandomStr));

Zacherl 11. Okt 2006 11:39

Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
 
Ahja stimmt ... konnte ich nicht sehen, da das beim Spanischen in meiner Text MessageBox nicht zu sehen war.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz