Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Textdatei durchsuchen (mit mehreren Ergebnissen) (https://www.delphipraxis.net/52337-textdatei-durchsuchen-mit-mehreren-ergebnissen.html)

Gast 28. Aug 2005 10:53


Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Hallo,

ich habe vor eine bestimmte Text-Datei zu durchsuchen nach Steam IDs. Diese müssen 2 mal : beinhalten und das klappt auch alles soweit.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
function CountOfChar(s:string;AChar:Char):integer;
var _i : integer;
begin
Result := 0;
  for _i := 1 to Length(s) do
   begin
    if s[_i] = AChar then
     inc(Result);
   end;
end;

begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Valve\Steam',FALSE);
Path := reg.ReadString('InstallPath');
sl := TStringList.Create;
sl.LoadFromFile(Path+'/Steam.log');
sl.CaseSensitive := FALSE;
for line := 0 to sl.Count -1 do
begin
  la := Pos(' for ',sl.Strings[line]);
  if la <> 0 then
   begin
    s := Copy(sl.Strings[line],la+5,length(sl.Strings[line])-la+5);
    if Pos(' ',s) = 0 then  // prüft ob s leerzeichen hat
        if CountOfChar(s,':') = 2 then // Steam Id muss zwei : haben
        Edit1.Text := s;
   end;
end;
end;

Doch in dieser Datei stehen auch mal 5 Steam IDs drin und wie schaffe ich es nun, dass alle verschiedenen STeam IDs ausgelesen werden ? Wäre cool wenn mir jemand helfen würde ;)

Grüße!

tigerman33 29. Aug 2005 07:42

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Deinem Code nach zu urteilen würde ich sagen:
Auslesen müsste er doch alle, nur angezeigt wird halt immer nur die letzte. Dann müsstest du vielleicht mit einer ListBox arbeiten oder so. :coder: :

Gast 29. Aug 2005 15:13

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Aber wie schaffe ich es, dass keine doppelten Steam IDs angezeigt werden ?

BrunoT 29. Aug 2005 16:01

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Hi,

mit einer For- Schleife durch die listbox gehen und nur dann add aufrufen, wenn der String noch nicht in der Listbox ist.

mfg

BrunoT

Delphi-Quellcode:
gefunden:=false;
For i:=0 to Listbox.Items.Count-1 do
  if Listbox.Items[i]=s then
  gefunden:=True;
If not gefunden then
Listbox.Items.add(s);
Ungetestet

Gast 29. Aug 2005 16:14

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
wie muss ich "gefunden" dnen definieren ?

Ich verwende keine Listbox sondern ein Memofeld, wie mache ich es da :( ?

shmia 29. Aug 2005 16:27

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Zitat:

Zitat von Tigerhead
wie muss ich "gefunden" dnen definieren ?
Ich verwende keine Listbox sondern ein Memofeld, wie mache ich es da :( ?

Listbox.Items und Memo.Lines haben den gleichen Datentyp: TStrings.
Also wird so programmiert, dass man Listbox oder Memofeld Ratz-Fatz austauschen kann:
Delphi-Quellcode:
var
   liste: TStrings;
begin
  liste := Memo1.Lines; // oder liste := ListBox1.Items;

   ....
for line := 0 to sl.Count -1 do
begin
  la := Pos(' for ',sl.Strings[line]);
  if la <> 0 then
   begin
    s := Copy(sl.Strings[line],la+5,length(sl.Strings[line])-la+5);
    if Pos(' ',s) = 0 then  // prüft ob s leerzeichen hat
        if CountOfChar(s,':') = 2 then // Steam Id muss zwei : haben
        begin
           if liste.IndexOf(s) < 0 then  // ist s schon in Liste
              liste.Add(s);              // nein: also dazu
        end;
   end;
end;

BrunoT 30. Aug 2005 06:45

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Hi shima,

das kannte ich noch nicht: :gruebel:
Delphi-Quellcode:
 if liste.IndexOf(s) < 0 then
man kann alt werden wie ´ne Kuh und lernt immer noch dazu! :???:

schöne Lösung, gefällt mir

tigerman33 30. Aug 2005 07:47

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
Nur mal so interessehalber: Wie hast du denn sonst bis jetzt geprüft, ob ein Element schon Teil einer Liste war? :gruebel:

BrunoT 30. Aug 2005 07:53

Re: Textdatei durchsuchen (mit mehreren Ergebnissen)
 
@tigerman33

zu Pascal- Zeiten war das ganze noch nicht so komfortabel und mit Stringlisten arbeite ich noch nicht so lange.

Zitat:

Zitat von BrunoT

mit einer For- Schleife durch die listbox gehen und nur dann add aufrufen, wenn der String noch nicht in der Listbox ist.

mfg

BrunoT

Delphi-Quellcode:
Var
 gefunden:boolean;

gefunden:=false;
For i:=0 to Listbox.Items.Count-1 do
  if Listbox.Items[i]=s then
  gefunden:=True;
If not gefunden then
Listbox.Items.add(s);
Ungetestet

:spin2:

Wissen ist Macht, nichts wissen macht nichts! :chat:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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