| Autor |
Beitrag |
Monty7
      
Beiträge: 26
|
Verfasst: Sa 11.09.04 17:10
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.
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: Sa 11.09.04 17:30
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: 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
      
Beiträge: 849
|
Verfasst: 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.
_________________ Ciao, Sprint.
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: So 12.09.04 12:51
Wenn ichs wuesste haette ich hier nicht gefragt.
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
      
Beiträge: 849
|
Verfasst: 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.
_________________ Ciao, Sprint.
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: So 12.09.04 13:18
Ok ok, ich will mich hier auch mit niemanden haun
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 ?
Monty
|
|
Sprint
      
Beiträge: 849
|
Verfasst: 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...
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; |
_________________ Ciao, Sprint.
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: So 12.09.04 14:36
Hi !
Also erstmal danke, ich habs soweit alles angepasst.
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.
Mh, danke...
Monty
EDIT >> Also das Fenster oeffnet sich wenn ich den CheckButton klicke, und dann ist halt mein System am Abnuggln
|
|
Sprint
      
Beiträge: 849
|
Verfasst: So 12.09.04 14:43
Wie groß ist die Datei denn, die geladen wird?
_________________ Ciao, Sprint.
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: So 12.09.04 15:15
Zwischen wenigen kb bis zu 1mb.
Gruss
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: 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
      
Beiträge: 849
|
Verfasst: So 12.09.04 16:44
Ich glaube du solltest dir mal ein Delphi Buch zulegen.
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; |
_________________ Ciao, Sprint.
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: 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 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 26
|
Verfasst: 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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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. 
|
|
Monty7 
      
Beiträge: 26
|
Verfasst: 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.  |
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
|
|
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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?
|
|