![]() |
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.
|
Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
Sorry, aber ich habs grad ausprobiert in nem Mini-Pogramm, bei Random(2) kommt entweder 1 oder 0, ist ja auch logisch, denn er darf aus Zwei Sachen das Ergebnis wählen, in diesem Fall eins oder null! Wenn ich also Random(12) nehme, dann kriege ich Wert von 0 bis 11, denn das sind zwölf werte, weil die null ja auch einer ist
hat zwar nichts mit dem Thema zu tun... |
Re: Listbox: Inhalt formatierter Zeilen auf Variablen vertei
Mhh stimmt, aber Random(0) ergibt trotzdem 0 ... insofern müsste das -1 beim Random entfernt werden:
Delphi-Quellcode:
RandomStr := ListBox1.Items[Random(ListBox1.Items.Count)];
Spanisch := Copy(RandomStr, 1, pos(Char(VK_TAB), RandomStr)); Deutsch := Copy(RandomStr, pos(Char(VK_TAB), RandomStr) + 1, length(RandomStr)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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