Entwickler-Ecke
Sonstiges (Delphi) - Datei einlesen, auswerten, ausgeben !
Monty7 - Sa 11.09.04 17:10
Titel: Datei einlesen, auswerten, ausgeben !
Hi !
Also ich habe mal wieder ein Prob.
Ich habe Dateien, deren Inhalt ich sortieren muss.
Und zwar haben die saumäßig viele Zeilen und es sind nur Zeilen interessant wo blub drinne steht. Wie mach ich das am Besten ?
Gruss und Dank.
Monty7 - So 12.09.04 12:36
Also ich hab jetzt soweit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TSchoeneForm.CheckButtonClick(Sender: TObject); var found : String; begin found := Pos('blub', LoadMemo.Lines.Text); SaveMemo.Lines.Text:=found; end; |
Also zum Verstaendnis .
Ich habe zwei Memos, in das eine wird die Textdatei geladen, nach blub durchsucht und die die Ergebnisse, also Lines mit blub sollen ins SaveMemo.
Nur meckert er da rum mit String un Integer, vll weil in den eine Line so aussieht >>
123.123.123.123 blub true zeah
die anderen sehen so aus, die unwichtig sind
123.123.123.123 ashdfsj dfncsd fkj fjkj23
Ideen ?
Danke,
Monty
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
Sprint - So 12.09.04 12:49
| Monty7 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3:
| var found : String; begin found := Pos('blub', LoadMemo.Lines.Text); | |
Vielleicht solltest du mal Pos in der Delphi Hilfe nachschauen!!!!!!!!!!
Pos gibt ganz bestimmt keinen String wieder. Wenn du weiterhin so programmieren willst, dann wechsel lieber zuVisual Basic.
Da sind solche krassen Fehler erlaubt.
Monty7 - So 12.09.04 12:51
Wenn ichs wuesste haette ich hier nicht gefragt. :oops:
Und bevor du sowas schreibst schreib doch am Besten gar nichts, du weisst ja anscheinend was pos ausgibt, warum sagst du es denn nicht ?
Hast du etwa nie angefangen ?
Monty
Sprint - So 12.09.04 13:12
| Monty7 hat folgendes geschrieben: |
warum sagst du es denn nicht ?
Hast du etwa nie angefangen ? |
Das sollte kein böses Posting von mir sein. Ich will nur erreichen, das du in die Hilfe von Delphi nachschaust.
Pos gibt einen Integerwert zurück. Wenn der gesuchte String/Wort gefunden worden ist, dann ist der Wert größer als null.
Das bedeuted, wenn Pos = 0, dann hat Pos nichts gefunden.
Monty7 - So 12.09.04 13:18
Ok ok, ich will mich hier auch mit niemanden haun :D
In der Delphi Hilfe finde ich unter Pos function nur
| Zitat: |
function Pos(Substr: string; S: string): Integer;
Description
Pos searches for a substring, Substr, in a string, S. Substr and S are string-type expressions.
Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero. |
Mh, und bei genauen hinsehen und nachdenken an meine Englisch Kenntnisse sehe ich das es da steht und verstehe aber nicht warum im SaveMemo 0 ausgegeben wird, wenn ich eine Text in der fast in jeder Zeile ein blub steht lade.
Wie kann ich denn die Zeilen mit blub in das SaveMemo bekommen ? :cry:
Monty
Sprint - So 12.09.04 13:30
Für das folgende Beispiel von mir, brauchst du auf der Form einen Button (Button1) und ein Memo (Memo1).
Hab versuchst alles zu dokumentieren. Damit es dir einfacher fällt...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; I: Integer; begin
SL := TStringList.Create;
try
SL.LoadFromFile('C:\MeineDatei.txt');
for I := 0 to SL.Count - 1 do begin
if Pos('blub', SL.Strings[I]) > 0 then begin
Memo1.Lines.Add(SL.Strings[I]);
end;
end;
finally
SL.Free;
end;
end; |
Monty7 - So 12.09.04 14:36
Hi !
Also erstmal danke, ich habs soweit alles angepasst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| procedure TSchoeneForm.CheckButtonClick(Sender: TObject); var SL: TStringList; I: Integer; begin
SL := TStringList.Create;
try
SL.LoadFromFile(LoadMemo.Lines.Text); for I := 0 to SL.Count - 1 do begin
if Pos('blub', SL.Strings[I]) > 0 then begin
SaveMemo.Lines.Add(SL.Strings[I]);
end;
end;
finally
SL.Free;
end;
end; |
Wenn ich das Programm starte, oeffnet sich ein neues Fenster, da steht der Inhalt vom LoadMemo drin und alles haengt sich auf.
Ich hab die Kommentare hier entfernt damits nicht so lang wird, ich danke dir, hab soweit alles verstanden. Schade das es hier kein Kuesschen Smiley gibt. :D
Mh, danke...
Monty
EDIT >> Also das Fenster oeffnet sich wenn ich den CheckButton klicke, und dann ist halt mein System am Abnuggln
Sprint - So 12.09.04 14:43
Wie groß ist die Datei denn, die geladen wird?
Monty7 - So 12.09.04 15:15
Zwischen wenigen kb bis zu 1mb.
Gruss
Monty7 - So 12.09.04 16:25
Ok, ich glaub ich hab den Fehler gefunden:
Delphi-Quelltext
1: 2: 3:
| SL.LoadFromFile(LoadMemo.Lines.Text); |
Sollte vielleicht heißen
Delphi-Quelltext
1: 2: 3:
| SL.LoadFromFile(LoadBlubOpenDialog.Filename); |
Nur wenn ich dann den CheckButton klicke passiert gar nichts. Rein 0.
Monty
Sprint - So 12.09.04 16:44
Ich glaube du solltest dir mal ein Delphi Buch zulegen. :!:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; I: Integer; begin
if not OpenDialog1.Execute then Exit;
SL := TStringList.Create;
try
SL.LoadFromFile(OpenDialog1.FileName);
for I := 0 to SL.Count - 1 do begin
if Pos('blub', SL.Strings[I]) > 0 then begin
Memo1.Lines.Add(SL.Strings[I]);
end;
end;
finally
SL.Free;
end;
end; |
Monty7 - So 12.09.04 18:48
Das ist alles doof und egal wie ich es mache, probiere oder was auch immer, dann kommt schon mal kein Fehler beim compilieren und dann macht das Tool nicht was ich will.
Es funktioniert nicht, wenn ich so den ClickButton anklicke dann will er ne datei öffnen, aber die soll er sich ja aus dem LoadMemo holen.
Das mit dem Buch halt ich für eine mittelwertige Idee, da ich schon PHP durch learning by doing gelernt habe.
und ich lerne ja hier ständig was dazu, sprich ich verstehe es auch, aber selber komm ich nie drauf, ich denke mal das kommt mit der zeit...
naja, vielen dank erstmal soweit, ich geh mich jetzt erschießen 8)
Delete - So 12.09.04 23:15
Wie "aus dem Momo holen"? Steht die Datei in einer Zeile eines Memos oder wie? Du musst doch nur die Quelle anpassen vom der Methode LoadFromFile. Das dürfte doch wohl kein Problem sein oder?
Monty7 - Mo 13.09.04 12:52
Ist es aber.
Also ich lade die Datei in das LoadMemo, da steht dann zum Beispiel
123.123.123.123 skfjdkf blub asdjkj kj
123.123.123.123 sdfjk jksdfj ksdfj
123.123.123.123 dflkeaf ksdflk sdfkl
Gruss
Delete - Mo 13.09.04 14:03
Also was den jetzt? Steht in dem Memo nun der Datei anme der zu bearbeitenden Datei oder sthet in dem Memo der Inhalt der betreffenden Datei? Wenn es der Inhalt ist, dann übergeb doch der Routine von Sprint den sleben Dateinamen. Ich verstehe immer noch nicht dein problem. Irgendwie scheint einer von uns ziemlich begriffsstutzig zu sein. :roll:
Monty7 - Mi 15.09.04 16:15
| Luckie hat folgendes geschrieben: |
| Also was den jetzt? Steht in dem Memo nun der Datei anme der zu bearbeitenden Datei oder sthet in dem Memo der Inhalt der betreffenden Datei? Wenn es der Inhalt ist, dann übergeb doch der Routine von Sprint den sleben Dateinamen. Ich verstehe immer noch nicht dein problem. Irgendwie scheint einer von uns ziemlich begriffsstutzig zu sein. :roll: |
Ich lade den Inhalt mit einem OpenDialog ins LoadMemo.
Ein Freund meinte ich solls ganz leicht mit AssignFile(), Reset() und Readln() machen.
Ich hab aber keine Ahnung wie.
Also nochmal:
LoadMemo soll Line für Line nach Blub durchsucht werden, Lines die Blub enthalten sollen nach SaveMemo gepastet werden.
Greetz
Delete - Mi 15.09.04 16:41
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure GetBlubLines(FileName: string; var Memo: TMemo); var f: TextFile; str: string; begin AssignFile(f, FileName); Reset(f); While not EOF(f) do begin ReadLn(f, str); if Pos('blub', str) > 0 then Memo.Lines.Add(str); end; CloseFile(f); end; |
*Ungetestet*
Noch Fragen?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!