Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi String in StringList suchen (https://www.delphipraxis.net/82470-string-stringlist-suchen.html)

oki 13. Dez 2006 20:02


String in StringList suchen
 
Hi,

ich suche die Zeilennummer in einer StringList, in der ein Teilstring das erste mal vor kommt.
Benutzt man IndexOf, so muss der gesamte String der Zeile mit dem Teilstring übereinstimmen. Geht also nicht.

als Bsp.
Delphi-Quellcode:
  Index := MyStringList.IndexOf('Msg_1001');
Die zu suchende Zeile lautet "$Msg_1001*1D".

Im Bsp. liefert IndexOf -1. Eigentlich wollte ich die Zeilennummer haben.

Kennt hier jemand eine andere einfache Möglichkeit außer die gesamte List in einer Schleife zu durchlaufen und Zeilenweise mit Pos zu suchen?

Gruß oki

mkinzler 13. Dez 2006 20:05

Re: String in StringList suchen
 
Das .IndexOf funktioniert, muß der Suchstring mit einem Eintrag komplett übereinstimmen. In deinem Fall mußt du wohl jeden Teilstring mit Pos o.ä. Durchsuchen.

oki 13. Dez 2006 20:11

Re: String in StringList suchen
 
Also doch der "lange" Weg. Naja, wollte nur sicher gehen.

Dank und Gruß oki

oki 13. Dez 2006 20:18

Re: String in StringList suchen
 
hab's jetzt so gelöst:
Delphi-Quellcode:
function GetMsgStartLine(Identifier: String): Integer;
var Counter : Integer;
begin
  Result := -1;
  For counter := 0 to MyStringList.Count -1 do begin
    IF Pos(Identifier, MyStringList.Strings[Counter]) > 0 then begin
      Result := Index;
      Exit;
    end;
  end;
end;
Gruß

oki 19. Dez 2006 12:23

Re: String in StringList suchen
 
Hi Leute,

beginner77 hat mich auf einen Fehler aufmerksam gemacht. Hier noch mal der korrekte Code:
Delphi-Quellcode:
function GetMsgStartLine(Identifier: String): Integer;
var Counter, Index : Integer;
begin
  Result := -1;
  For counter := 0 to MyStringList.Count -1 do begin
    Index := Pos(Identifier, MyStringList.Strings[Counter]);
    IF Index > 0 then begin
      Result := Index;
      Exit;
    end;
  end;
end;
Gruß oki

Klaus01 19. Dez 2006 12:52

Re: String in StringList suchen
 
Wolltest Du nich die Zeilennumer haben.

Delphi-Quellcode:
function GetMsgStartLine(Identifier: String): Integer;
var Counter, Index : Integer;
begin
  Result := -1;
  For counter := 0 to MyStringList.Count -1 do begin
    Index := Pos(Identifier, MyStringList.Strings[Counter]);
    IF Index > 0 then begin
      Result := Index;
      Exit;
    end;
  end;
end;
Hier bekommst Du die Position in der Zeile geliefert aber nicht die Zeile.

Result:=counter

sollte Dir die Zeilennummer geben.

Grüße
Klaus

oki 19. Dez 2006 13:11

Re: String in StringList suchen
 
Hi Klaus,

ich gebs auf :wall:

Natürlich wollte ich die Zeilennummer haben. Hier die x-te Korrektur:
Delphi-Quellcode:
function GetMsgStartLine(Identifier: String): Integer;
var Counter : Integer;
begin
  Result := -1;
  For counter := 0 to MyStringList.Count -1 do begin
    IF Pos(Identifier, MyStringList.Strings[Counter]) > 0 then begin
      Result := Counter;
      Exit;
    end;
  end;
end;
Ich hoffe das war's jetzt. wenn einem noch was auffällt, her damit.

kalmi01 19. Dez 2006 13:47

Re: String in StringList suchen
 
Moin moin Leuts,

mal so, aus dem Handgelenk würde ich das ehr so angehen:

1.) i := Pos('suchtext', MyStringList.Text);
2.) von der Position i rückwärts nach CR/LF suchen
3.) von der Position i vorwärts nach CR/LF oder #00 suchen

Zwischen den Pos. 1. und Pos. 2. liegt der exakte String, mit
dem man dann ein
Delphi-Quellcode:
Index := MyStringList.IndexOf('Msg_1001');
füttern könnte.
Dürfte bei langen Listen auch schneller sein.

oki 19. Dez 2006 17:40

Re: String in StringList suchen
 
Hi kalmi01,

warum schneller?

Gruß

kalmi01 19. Dez 2006 18:06

Re: String in StringList suchen
 
Zitat:

Zitat von oki
warum schneller?

Weil der Vergleich auf GLEICHHEIT schneller ist, als das Suchen einer Position in einem String ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.
Seite 1 von 2  1 2      

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