AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wörter in einer Datei finden

Ein Thema von Ajin · begonnen am 25. Sep 2006 · letzter Beitrag vom 9. Okt 2006
Antwort Antwort
Ajin

Registriert seit: 23. Feb 2006
Ort: Mons
252 Beiträge
 
Delphi 2010 Professional
 
#1

Wörter in einer Datei finden

  Alt 25. Sep 2006, 14:57
Hi DP!

Ich muss mich demnächst mit allerlei Dateien und deren Inhalt auseinandersetzen. Bestimmte Werte in vielen unterschiedlichen Dateien müssen angepasst werden und das recht häufig. Deshalb mein Entschluss mir dafür eine kleine Anwendung zu schreiben.

Ich habe eine Textdatei da steht allerlei Krimskrams drin - unter anderem auch eine Versionsnummer. Diese möchte ich gerne auslesen. Über die Foren Suchfunktion bin ich über TStringlist gestolpert. Viel gearbeitet habe ich damit leider nicht.

Folgenden Code habe ich mir gebastelt:

Delphi-Quellcode:
//gleich nach Programmstart prüfen!
procedure TFmain.FormCreate(Sender: TObject);
var
version: string;
s1:TStringlist;
i, zeilennr:integer;
Begin
 //Prüfen ob die Datei bla.txt existiert
 if FileExists('C:\bla.txt') then
 begin
    s1:=TStringList.Create;
    s1.LoadFromFile('C:\bla.txt');
    i:=0;

    try

    for zeilennr:=0 to s1.Count-1 do begin //Schleife über alle Zeilen, Zählung
                                            //beginnt mit 0, die Eigenschaft Count
                                            //enthält die Gesamtzahl der Zeilen

    if s1[zeilennr]='Version =then //wenn der Text "Version" gefunden wurde,
        ShowMessage('Version gefunden in Zeile '+IntToStr(zeilennr+1)); //Meldung ausgeben
    end;
  finally
    s1.free; //Objekt wieder freigeben
  end;
    l_blaver.Caption:='Bla Version: ';
 end
 else
 begin
   l_faustver.Caption:='bla nicht gefunden'
 end;


End;
Was ich gerne hätte:
-Also nach dem Programmstrart prüfen ob die Datei existiert (wenn nicht: motzen)
-datei in Stringlist laden
-Stringlist nach 'Version =' durchsuchen
-Text nach dem '=' in variable speichern und am ende ausgeben


Das Problem:
In der Datei bla.txt steht die Version in der 3. Zeile allerdings in dieser Form: '_____Version = 1.0'
D.h. mit ein paar Leerzeichen dazwischen. (das Forum eliminiert die Leerzeichen, deshalb hab ich den Unterstrich verwendet).

Wie stell ich denn das nun an, dass meine Routine trotzdem das Wort 'Version' findet und nach dem = Zeichen sich die 1.0 merken kann?
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#2

Re: Wörter in einer Datei finden

  Alt 25. Sep 2006, 15:33
So könnte man das machen ! (Sicher nicht das Optimum)


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const SearchString = 'Version=';
      filename = 'c:\mytextfile.txt';

var MyTextFileContent : TStringList;
    i : Integer;
    tempStr : String;
begin
  MyTextFileContent := TStringList.Create;
  try
    MyTextFileContent.LoadFromFile(filename);
  except
    Showmessage('Motz');
    MyTextFileContent.Free;
    exit;
  end;
  for i := 0 to MyTextFileContent.Count -1 do
    if pos(SearchString,MyTextFileContent[i]) <> 0 then
    begin
      tempStr := MyTextFileContent[i];
      delete(tempStr,1,pos(SearchString,MyTextFileContent[i])+ length(SearchString)-1);
      //VariableX := tempStr;
      showmessage('gefunden in Zeile ' + Inttostr(i +1));
      MyTextFileContent.Free;
      exit;
    end;
  MyTextFileContent.Free;
end;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
pathfinder78

Registriert seit: 5. Jul 2005
7 Beiträge
 
#3

Re: Wörter in einer Datei finden

  Alt 25. Sep 2006, 15:42
Es gibt auch eine einfachere Lösung, nämlich über die Text-Eigenschaft auf den gesamten Inhalt zugreifen, also etwa so:
Delphi-Quellcode:
s1:=TStringList.Create;
s1.LoadFromFile('C:\bla.txt');
//Absolute Position (1. Vorkommen) des Strings suchen
i:=Pos('Version', s1.Text);
//Wenn nichts gefunden wurde, ist i=0
//Ausschneiden ab dieser Position, dann nach Zeilenende suchen (#13+#10), fertig
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#4

Re: Wörter in einer Datei finden

  Alt 26. Sep 2006, 08:49
Hey chrisw die Lösung funktionert einwandfrei!
Nun stellt sich mir die Frage: wie kann ich in der MyTextfilecontent an der Pos des SearchString die nächsten Zeichen merken bis zum 1. Leerzeichen?

Version = 1.0.0.2.3.4

d.h. nach dem '=' folgt ein Leerzeichen, dann eine folge von Zeichen bis man wieder auf eine Leerstelle trifft.

Wenn ich das lösen könnte wär ich erlöst
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#5

Re: Wörter in einer Datei finden

  Alt 26. Sep 2006, 09:50
So könnte man das machen !

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const SearchString = 'Version=';
      filename = 'c:\mytextfile.txt';

var MyTextFileContent : TStringList;
    i,j : Integer;
    tempStr : String;
    ErstesLeerzeichen : Boolean;
begin
  MyTextFileContent := TStringList.Create;
  try
    MyTextFileContent.LoadFromFile(filename);
  except
    Showmessage('Motz');
    MyTextFileContent.Free;
    exit;
  end;
  for i := 0 to MyTextFileContent.Count -1 do
    if pos(SearchString,MyTextFileContent[i]) <> 0 then
    begin
      tempStr := MyTextFileContent[i];
      delete(tempStr,1,pos(SearchString,MyTextFileContent[i])+ length(SearchString)-1);
      ErstesLeerzeichen := False;
      for j := Length(tempstr) downto 0 do
        begin
          if ErstesLeerzeichen and (tempStr[i] = ' ') then break;
          if tempStr[i] <> ' then delete(tempStr,i,1) else ErstesLeerzeichen := True;
        end;
      showmessage('Der gesuchte String lautet : ' + tempstr + #13#10 +
                  'Er wurde gefunden in Zeile ' + Inttostr(i +1));
      MyTextFileContent.Free;
      exit;
    end;
  MyTextFileContent.Free;
end;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#6

Re: Wörter in einer Datei finden

  Alt 26. Sep 2006, 09:58
Oder noch einfacher :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const SearchString = 'Version= '; // hier ein Leerzeichen einfügen
      filename = 'c:\mytextfile.txt';

var MyTextFileContent : TStringList;
    i,j : Integer;
    tempStr : String;
    ErstesLeerzeichen : Boolean;
begin
  MyTextFileContent := TStringList.Create;
  try
    MyTextFileContent.LoadFromFile(filename);
  except
    Showmessage('Motz');
    MyTextFileContent.Free;
    exit;
  end;
  for i := 0 to MyTextFileContent.Count -1 do
    if pos(SearchString,MyTextFileContent[i]) <> 0 then
    begin
      tempStr := MyTextFileContent[i];
      delete(tempStr,1,pos(SearchString,MyTextFileContent[i])+ length(SearchString)-1);
      //diese Zeile einfügen
      if pos(' ', tempstr) <> 0 then delete(tempstr,pos(' ', tempstr),1000);
      showmessage('Der gesuchte String lautet : ' + tempstr + #13#10 +
                  'Er wurde gefunden in Zeile ' + Inttostr(i +1));
      MyTextFileContent.Free;
      exit;
    end;
  MyTextFileContent.Free;
end;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#7

Re: Wörter in einer Datei finden

  Alt 26. Sep 2006, 10:34
chrisw du GOTT

Genau das ist es! Das ist für mich die Grundlage für weitere Überlegungen und Dateioperationen!
Im Prinzip hattest du oben beim Searchstring einen guten Einfall: einfach das Leerzeichen bis zum = mit einbauen

Jetzt noch ein wenig Sonnenschein und der Tag ist gerettet!

Danke nochmals für die super Hilfe!

/bow

Ajin
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Ajin

Registriert seit: 23. Feb 2006
Ort: Mons
252 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Wörter in einer Datei finden

  Alt 9. Okt 2006, 15:39
Hallo ihr lieben!

Hm die obigen Codeschnipsel sind wirklich gut, aber jetzt hab ich ne wirklich harte Nuss. Eine Textdatei sieht so aus:

EXER/TIMO 33/STEFAN//
MSHAHA/MEINEOMA/GAMMICH/-/-//
SOISTES/NUNMAL//
TRALALA/NUNJA/BANAL//

Es sind mehrere Zeilen. Der Zeilenabschluss bildet jeweils ein doppel '/'
Dann beginnt die nächste Zeile.

Schwierig ist: Das Textfile von der 1. Zeile an zu lesen bist zum ersten / --> Das Wort in einem Edit-Feld ablegen
weiterlesen bis zum nächsten / --> das Wort in einem Edit ablgegen. Und das bis zum Zeilenende bzw EOF

Für das obige Beispiel müsste dann im
1. Edit stehen: EXER
2. Edit: TIMO 33
3. Edit: STEFAN
4. Edit: MSHAHA

usw.

In wie weit müsste ich den obigen Quelltext ändern oder besser einen neuen verfassen?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Wörter in einer Datei finden

  Alt 9. Okt 2006, 15:46
Du könntest mit Hilfe der Stringlist und der property Delimiter: Char;
den '/' als Textdelimiter nehmen.
In der Hilfe mal nach DelimetedText suchen.

Die doppelten / solltest Du dann vorher durch einen einfachen / ersetzen.
Hierzu könnte StringReplace nützlich sein.

Noch eine Anmerkung: Normalerweise solltest Du für jede neue Frage einen eigenen Thread
anfangen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:19 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