![]() |
Wörter in einer Datei finden
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:
Was ich gerne hätte:
//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; -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? |
Re: Wörter in einer Datei finden
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; |
Re: Wörter in einer Datei finden
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 |
Re: Wörter in einer Datei finden
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 :) |
Re: Wörter in einer Datei finden
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; |
Re: Wörter in einer Datei finden
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; |
Re: Wörter in einer Datei finden
:hello: 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! :dp: Danke nochmals für die super Hilfe! /bow Ajin |
Re: Wörter in einer Datei finden
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? |
Re: Wörter in einer Datei finden
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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