![]() |
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:
Mein Problem hierbei: Die Edit bleibt leer.
...
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; Bitte hülft mir ;) Danke im Voraus Silentium |
Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
Hi,
Delphi-Quellcode:
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.
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)); Florian |
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 |
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) |
Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
Hmm ich dachte random(256) bedeutet minimaler Wert = 0, maximaler Wert = 255
|
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 ... |
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 |
Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
Zitat:
Zitat:
Florian |
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)); |
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 04:42 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