![]() |
Per ReadLn() zufällige Zeile aus Textdatei lesen
Hallo!
Für nen kleines Programm zwischendurch wollte ich gerne eine zufällige Zeile aus einer Textdatei auslesen. Ich hab die Datei so geöffnet:
Delphi-Quellcode:
Nun möchte ich gerne in einer OnClick Prozedur eine zufällig ausgewählte Zeile aus dieser Datei auslesen...
AssignFile(m_namen, ParamStr(1)+'m.txt');
{$I-} Reset(m_namen); {$I+} if IOResult <> 0 then begin MessageDlg('Ein Fehler ist aufgetreten!'+#10#13 +'Vielleicht fehlt die Datei: m.txt ?!?', mtWarning, [mbOK], 0) end; Bisher bin ich soweit:
Delphi-Quellcode:
Ich weiss, das ist nicht viel und leider meckert er auch noch rum und erzählt mir einen von ordinalen Typen nur komm ich nicht weiter. Ich weiss nicht wie ich das hinbekomm.
procedure TMain_Form.Btn_GenerateNameClick(Sender: TObject);
begin if RBtn_male.Checked then vorname := ReadLn(m_namen,vorname); end; Wär nett, wenn einer von euch helfen könnte... Danke im Vorraus! MfG Florian :hi: |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
Zitat:
Zudem kannst du mit ReadLn schlecht querfeldein in der Datei lesen. |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
Thx! Geht schon besser.
Nun geht er aber von vorne nach hinten durch die Datei aber ich möchte ja gerne kreuz und quer durchgehen. Kann man das nicht irgendwie arrangieren? Vielleicht per Random eine Zeile auswählen und die auslesen? MfG Florian :hi: |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
mit seek(...RND..) ?
stb |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
^^ Wie benutzt man das? Aus der OH werd ich irgendwie nicht schlau... :(
MfG Florian :hi: |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
Zitat:
Mein Vorschlag ist die Datei mit Hilfe einer TStringList einzulesen und dann auf die Zeilen per Index zuzugreifen.
Delphi-Quellcode:
var
Lines: TStrings; Index: Integer; begin Lines := TStringList.Create; try // Datei "$(EXE-PFAD)\MeineDatei.txt" einlesen Lines.LoadFromFile(ExtractFileDir(ParamStr(0)) + '\MeineDatei.txt'); if Lines.Count = 0 then raise Exception.Create('Die Datei ist leer.'); Index := Random(Lines.Count); // Zufallszahl ermitteln aus [0, Count - 1] ShowMessage(Lines[Index]); finally Lines.Free; end; end; |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
Seltsam...
Ich habe zwei TXT´s mit Namen... 1. Bei den weiblichen Namen klappt fast alles. Da fehlt immer der erste Buchstabe. <-- Warum? 2. Bei den männlichen wird immer nur ein einziger Namen, der erste in der der Datei, angezeigt. <-- Warum? Danke im Vorraus! MfG Florian :hi: [EDIT] Ich habe folgenden Code und anscheinend werden bei den weiblichen auch immer nur die mit A am Anfang angezeigt...
Delphi-Quellcode:
und dann der "Aufruf":
procedure TMain_Form.OpenFiles(Sender: TObject);
begin { Es folgt das Öffnen der Textdateien in denen die Namen stehen... Wenn die Dateien leer sein sollten erscheint eine Warnmeldung... } //Männer Namen begin m_namen := TStringList.Create; m_namen.LoadFromFile(ExtractFileDir(ParamStr(0)) + '\m.txt'); if m_namen.Count = 0 then raise Exception.Create('Die Datei ist leer.'); anzahl_m := Random(m_namen.Count); end; //Frauen Namen begin w_namen := TStringList.Create; w_namen.LoadFromFile(ExtractFileDir(ParamStr(0)) + '\w.txt'); if w_namen.Count = 0 then raise Exception.Create('Die Datei ist leer.'); anzahl_w := Random(w_namen.Count); end; //Nachnamen begin nach_namen := TStringList.Create; nach_namen.LoadFromFile(ExtractFileDir(ParamStr(0)) + '\nach.txt'); if nach_namen.Count = 0 then raise Exception.Create('Die Datei ist leer.'); anzahl_nach := Random(nach_namen.Count); end; end;
Delphi-Quellcode:
Die Nachnamen habe ich erst mal rausgelassen... [/EDIT]
procedure TMain_Form.Btn_GenerateNameClick(Sender: TObject);
begin if RBtn_male.Checked then begin vorname := m_namen.ValueFromIndex[Random(anzahl_m)]; Edt_Name.Text := vorname end else begin vorname := w_namen.ValueFromIndex[Random(anzahl_w)]; Edt_Name.Text := vorname end end; |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
hi,
du könntest doch auch einfach (wenn du keine liste erzeugen willst) die datei öffnen, und dann dir mit random eine zeilenzahl kreieren lassen.
Delphi-Quellcode:
vll hilft ja das
assignfile ();
[..] zeilenzahl := random (max_zeilenzahl); // schleife liest zeile für zeile for i := 1 to zeilenzahl-1 do readln (t); // wenn i = zeilenzahl, wird die zeile eingelesen, tataa readln (t,zeile); closefile (t); devnull |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
Aber dann kann ich einer Variable doch immer noch nicht ReadLn() zuweisen oder?
MfG Florian :hi: P.S.: Ich geh jetzt erst mal die Experten im Borland Chat fragen... ;) |
Re: Per ReadLn() zufällige Zeile aus Textdatei lesen
Hi Devnull,
Zitat:
Gruss, Tom |
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