AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Per ReadLn() zufällige Zeile aus Textdatei lesen
Thema durchsuchen
Ansicht
Themen-Optionen

Per ReadLn() zufällige Zeile aus Textdatei lesen

Ein Thema von flomei · begonnen am 15. Dez 2003 · letzter Beitrag vom 16. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#1

Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 18:22
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:
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;
Nun möchte ich gerne in einer OnClick Prozedur eine zufällig ausgewählte Zeile aus dieser Datei auslesen...
Bisher bin ich soweit:
Delphi-Quellcode:
procedure TMain_Form.Btn_GenerateNameClick(Sender: TObject);
  begin
    if
      RBtn_male.Checked
    then
      vorname := ReadLn(m_namen,vorname);
  end;
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.
Wär nett, wenn einer von euch helfen könnte...

Danke im Vorraus!

MfG Florian
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 18:24
Zitat:
vorname := ReadLn(m_namen,vorname);
ReadLn ist eine Prozedur und hat somit keine direkten Rückgabewert. Die Zuweisung ist also falsch.

Zudem kannst du mit ReadLn schlecht querfeldein in der Datei lesen.
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 18:29
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
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
stb

Registriert seit: 12. Dez 2003
11 Beiträge
 
#4

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 18:31
mit seek(...RND..) ?
stb
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 18:34
^^ Wie benutzt man das? Aus der OH werd ich irgendwie nicht schlau...

MfG Florian
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 18:44
Zitat von flomei:
Wie benutzt man das?
Gar nicht, da es nur mit file / file of Datentyp funktioniert, aber nicht mit TextFile.

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;
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 19:34
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

[EDIT] Ich habe folgenden Code und anscheinend werden bei den weiblichen auch immer nur die mit A am Anfang angezeigt...
Delphi-Quellcode:
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;
und dann der "Aufruf":
Delphi-Quellcode:
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;
Die Nachnamen habe ich erst mal rausgelassen... [/EDIT]
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#8

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 19:41
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:
  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);
vll hilft ja das

devnull
-- Never change a running system --
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 19:51
Aber dann kann ich einer Variable doch immer noch nicht ReadLn() zuweisen oder?

MfG Florian

P.S.: Ich geh jetzt erst mal die Experten im Borland Chat fragen...
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Per ReadLn() zufällige Zeile aus Textdatei lesen

  Alt 15. Dez 2003, 19:52
Hi Devnull,

Zitat von devnull:
zeilenzahl := random (max_zeilenzahl);
Wo dann das Problem, wie du max_zeilenzahl ermitteln willst, ohne vorher alles in den Speicher zu lesen oder sonstwie die CR zu zählen. Deshalb würd ich auch die Datei mittels einer TStringlist komplett einlesen und anschliessend mit StringList[random(Stringlist.count)] in eine Zeile springen.

Gruss,
Tom
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:30 Uhr.
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