Autor Beitrag
Monty7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 11.09.04 17:30 
LINK

Gruß,
Jörg

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 12.09.04 12:36 
Also ich hab jetzt soweit:

ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 12.09.04 12:49 
Monty7 hat folgendes geschrieben:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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...
ausblenden volle Höhe 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

  // TStringList erstellen (ist wie LoadMemo.Lines)

  SL := TStringList.Create;

  // try/finally - falls ein Fehler auftritt
  // wird auch finally ausgeführt
  // das brauchen wir, um TStringList wieder freizugeben
  // könnte sein, das wir sonst ein Speicherleck haben

  try

    // große Datei mit Inhalt "blub" laden

    SL.LoadFromFile('C:\MeineDatei.txt');

    // jede einzele Zeile durchgehen

    for I := 0 to SL.Count - 1 do
    begin

      // jetzt nach dem Wort "blub" suchen

      if Pos('blub', SL.Strings[I]) > 0 then
      begin

        // blub wurde gefunden und wird jetzt in Memo1 eingetragen

        Memo1.Lines.Add(SL.Strings[I]);

      end{end if Pos}

    end{end for I}

  finally

    // reservierten Speicher bzw. Objekte/Klassen wieder freigeben

    SL.Free;

  end{end try/finally}

end{end procedure}

_________________
Ciao, Sprint.
Monty7 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 12.09.04 14:36 
Hi !
Also erstmal danke, ich habs soweit alles angepasst.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 12.09.04 14:43 
Wie groß ist die Datei denn, die geladen wird?

_________________
Ciao, Sprint.
Monty7 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 12.09.04 15:15 
Zwischen wenigen kb bis zu 1mb.

Gruss
Monty7 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: So 12.09.04 16:25 
Ok, ich glaub ich hab den Fehler gefunden:

ausblenden Delphi-Quelltext
1:
2:
3:
  
// große Datei mit Inhalt "blub" laden
   SL.LoadFromFile(LoadMemo.Lines.Text);


Sollte vielleicht heißen

ausblenden Delphi-Quelltext
1:
2:
3:
  
// große Datei mit Inhalt "blub" laden
   SL.LoadFromFile(LoadBlubOpenDialog.Filename);


Nur wenn ich dann den CheckButton klicke passiert gar nichts. Rein 0.


Monty
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 12.09.04 16:44 
Ich glaube du solltest dir mal ein Delphi Buch zulegen. :!:
ausblenden volle Höhe 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;

  // TStringList erstellen (ist wie LoadMemo.Lines)
  SL := TStringList.Create;

  // try/finally - falls ein Fehler auftritt
  // wird auch finally ausgeführt
  // das brauchen wir, um TStringList wieder freizugeben
  // könnte sein, das wir sonst ein Speicherleck haben
  try

    // große Datei mit Inhalt "blub" laden
    SL.LoadFromFile(OpenDialog1.FileName);

    // jede einzele Zeile durchgehen
    for I := 0 to SL.Count - 1 do
    begin

      // jetzt nach dem Wort "blub" suchen
      if Pos('blub', SL.Strings[I]) > 0 then
      begin

        // blub wurde gefunden und wird jetzt in Memo1 eingetragen
        Memo1.Lines.Add(SL.Strings[I]);

      end{end if Pos}

    end{end for I}

  finally

    // reservierten Speicher bzw. Objekte/Klassen wieder freigeben
    SL.Free;

  end{end try/finally}

end{end procedure}

_________________
Ciao, Sprint.
Monty7 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: 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
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 15.09.04 16:41 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure GetBlubLines(FileName: stringvar 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?