Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Textdatei (https://www.delphipraxis.net/148844-textdatei.html)

zapper54 9. Mär 2010 14:20


Textdatei
 
Hallo!

Ich habe folgendes Problem: Ich möchte gerne eine "Vokabelsuchmaschine" basteln. Die Vokabeln sollen in einet txt datei gespeichert werden. Nun soll eine Stringvariable die Vokabel aus dem Edit Feld (in das eingegeben wird) übernehmen. Und ab diesem Punkt kommt das Problem:

Nun soll einen andere Stringvariable solange die Textdatei durchsuchen (Zeile für Zeile) bis sie die Deutsche Vokabel vorfindet (Wenn String1= String2 ist). dann soll sie noch eine Zeile weiter lesen, und dann den Inhalt der Zeile unter dem deutschen Wort in einem Memo anzeigen.

Meine Fragen also:

1. Wie bringe ich die Stringvariable dazu, die Textdatei Zeile für Zeile auszulesen?

2. Wie kann ich überprüfen, wann String1 und String2 gleich sind?

3. Wie bringe ich sie dazu, nachdem sie das Wort gefunden hat, den Inhalt der nachfolgenden Zeile in ein Memofenster zu übertragen?

Ich danke schoneinmal im Vorraus für eure Antworten.

MfG

zapper54

Matze 9. Mär 2010 14:31

Re: Textdatei
 
Hallo,

Textdateien sind dafür sicher suboptimal. Eine Datenbank wie Firebird Embedded wäre sicher effizienter. Aber als Übung funktioniert es natürlich auch mit Textdateien.
Ganz grob aus dem Kopf:

Delphi-Quellcode:
var
  myFile: TextFile;
  SearchVoc: string;
  CurrentVoc: string;
begin
  AssignFile(myFile, 'Pfad zur txt');
  SearchVoc := 'gesuchte vokabel';
 
  while not Eof(myFile) do
  begin
    ReadLn(myFile, CurrentVoc);

    if CurrentVoc = SearchVoc then
    begin
      if not Eof(myFile)
      begin
        ReadLn(myFile, CurrentVoc);

        // gesuchte Vokabel: CurrentVoc

        break;
      end;
    end;
  end;
 
  CloseFile(myFile);
end;
Ich habe schon Jahre nichts mehr mit Textdateien gemacht und hoffe, dass es nicht komplett falsch ist. ;)

Grüße, Matze

Edit: "break" eingefügt, damit die Textdatei nicht immer komplett durchlaufen wird.

s.h.a.r.k 9. Mär 2010 14:35

Re: Textdatei
 
@Matze: Sollte so passten! Man könnte noch den IOResult nach dem Reset abfragen ({$I+} und {$I-} nicht vergessen), aber das kommt immer auf den Fall darauf an.

@zapper54: Schau dir vielleicht mal Ini-Dateien an. Das wäre vielleicht ein besserer Ansatz zum Speichern.

Luckie 9. Mär 2010 14:41

Aussagekräftiger Titel
 
Bitte gib deinem Beitrag einen aussagekräftigen Titel. Der jetzige Titel lässt nicht erkennen, um was für ein Problem oder Frage es sich handelt. Um den Titel zu ändern, editiere einfach deinen ersten Beitrag. Damit erleichterst du das Auffinden deines Beitrages mit der Suche und ersparst anderen Mitglieder ein unnötiges Öffnen deines Beitrages.

p80286 9. Mär 2010 15:18

Re: Textdatei
 
zunächst schlage ich vor nicht so zu speichern:

deutsches Wort
englisches Wort
deutsches wort
englisches Wort

sondern so:
deutsches wort = englisches Wort
deutsches Wort = englisches Wort

oder da es selten eine 1:1 Beziehung zwischen den Vokabeln gibt eine Datenbank (embedded).

mit einer TStringlist ist das doch kein Problem bis (ca. 30-50 MB)
Delphi-Quellcode:
VokListe:=Tstringlist.create;
Vokliste.loadfromFile('meineVokabeldatei.txt');
...
engVok:=VokListe.Indexof(deVok)+1; //wenn die englische Vokabel unter der deutschen Vokabel steht
Da fehlen natürlich noch Fehlerüberprüfungen und was sonst noch zu einem ordentlichen Programm gehört.

@matze
So würde ich nur arbeiten wenn das wirklich ein dicker Brocken wäre (und natürlich mit setTextbuf!)

Gruß
K-H

Matze 9. Mär 2010 15:50

Re: Textdatei
 
Zitat:

Zitat von p80286
@matze
So würde ich nur arbeiten wenn das wirklich ein dicker Brocken wäre (und natürlich mit setTextbuf!)

Wie gesagt, ich würde damit gar nicht arbeiten (genauso wenig wie mit deinem Source), sondern mit einer Embedded-Datenbank.
Dennoch wollte ich ihm zeigen, wie man mit Textdateien arbeiten kann, da er das gefragt hat. Das das keine gute Lösung für den produktiven Einsatz ist, schrieb ich bereits.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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