Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   "Pos" findet String wegen Einrückung nicht (https://www.delphipraxis.net/190570-pos-findet-string-wegen-einrueckung-nicht.html)

Freyr77 17. Okt 2016 12:47

Delphi-Version: 10 Seattle

"Pos" findet String wegen Einrückung nicht
 
Es geht um folgende Code, in dem "Pos" einfach einen String in einer StringList finden und die gefundene Stelle als Integer zurückgeben soll.

Delphi-Quellcode:
var
  sList: TStringList;
  Index: integer;

begin
  sList := TStringList.Create;

    Result := -1;
    sList := TStringList.Create;
    sList.LoadFromFile(FileName);
    for Index := 0 to sList.Count do
      if Pos(SearchText, sList.Strings[Index]) > 0 then
      begin
        Result := Index;
        sList.Free;
        Exit;
      end
      else
      ShowMessage('Einstiegspunkt wurde nicht gefunden.');
      sList.Free;
end;
Über dem gefundenen String (String ist in der benötigten Datei als Kommentar hinterlegt) wird ein neuer Text eingefügt. Geschrieben wird das ganze in eine .pas. Wenn ich den Kommentar am Anfang der Zeile schreibe, macht der Code auch was er soll. Eigentlich sollte der Kommentar aber "ordentlich formatiert" mit Einrückungen in der Zeile stehen. In diesem Fall wird er aber nicht mehr gefunden.

Hat da jemand eine Idee?
Und gibt es eine Möglichkeit die "Einrückungen" in einer Zeile als Integer wieder zu bekommen, um einzufügenden Code vorher schon zu formatieren?

Freyr77 17. Okt 2016 12:54

AW: "Pos" findet String wegen Einrückung nicht
 
Entschuldigung, der Code sieht so aus.... :

Delphi-Quellcode:
var
  sList: TStringList;
  Index: integer;

begin
  sList := TStringList.Create;
  try
    sList.LoadFromFile(FileName);
    Index := sList.IndexOf(SearchText);
    if Index > -1 then
    begin
      Result := Index;
    end
    else
      ShowMessage('Text nicht in ausgewaehlter Datei vorhanden.');

  finally
    sList.Free;
  end;
end;

p80286 17. Okt 2016 12:57

AW: "Pos" findet String wegen Einrückung nicht
 
Sollte ein String 'BlaBlaBla' in einer Zeile (Stringlist[i]) enthalten sein so kommt
Delphi-Quellcode:
pos
mit einem Wert >0 zurück!
Suchst Du nach 'blaBlaBla' und enthalten ist 'Blablabla' dann kommt 0 zurück!

Einrückungen haben da keinen Einfluß darauf!

Gruß
K-H

P.S.
Was denn nun
Delphi-Quellcode:
pos
oder
Delphi-Quellcode:
.Indexof
da gibt es kaum bemerkbare aber wichtige Unterschiede!

Klaus01 17. Okt 2016 12:57

AW: "Pos" findet String wegen Einrückung nicht
 
[/s].. du prüfst ja auch ob der SearchText am Zeilenanfang steht.
Liefert pos nicht -1 wenn nichts gefunden wurde?[s]

Eventuell mal über die Benutzung von regex nachdenken.

Bei IndexOf kommt es auf die Groß-Kleinschreibung an.
IndexOf prüft meines Wissens auch nur ob der gesamte Zeileninhalt dem SearchText entsprictht

Grüße
Klaus

Freyr77 17. Okt 2016 13:01

AW: "Pos" findet String wegen Einrückung nicht
 
Ich habe eine .txt-Datei zum testen. Hier steht der Kommentar am Anfang der Zeile. Hier funktioniert alles wunderbar.
In meiner .pas-Datei steht der Kommentar eben mit Einrückungen in einer Zeile. Hier wird der Text nicht gefunden.

Ich verstehe das nicht :|

Wenn ich den Kommentar übrigens in der .pas-Datei an den Anfang der Zeile setze wird er gefunden und es funktioniert!

t.roller 17. Okt 2016 13:04

AW: "Pos" findet String wegen Einrückung nicht
 
TRIM(SearchText);

http://www.delphibasics.co.uk/RTL.asp?Name=Trim

DelphendeElfen 17. Okt 2016 13:05

AW: "Pos" findet String wegen Einrückung nicht
 
Wie Klaus01 schon sagt.
Versuche mal in deiner Testdatei den Text auch einzurücken (in der es vorher funktionierte) und sieh die das Ergebnis an.
Ich denke für "IndexOf" ist es dann einmal der String mit Einrückung " text" und ohne Einrückung "text". Somit unterscheidet sich dein Ergebnis dementsprechend.
Du müsstest dann vermutlich die Einrückung weg trimmen oder anders berücksichtigen (so wie gerade zwischenzeitlich auch erwähnt).

Jim Carrey 17. Okt 2016 13:06

AW: "Pos" findet String wegen Einrückung nicht
 
Käme Trim() für dich in Frage?

Delphi-Quellcode:
if Pos(SearchText, Trim(sList.Strings[Index])) > 0 then

Aviator 17. Okt 2016 13:18

AW: "Pos" findet String wegen Einrückung nicht
 
Zitat:

Zitat von Klaus01 (Beitrag 1351087)
Liefert pos nicht -1 wenn nichts gefunden wurde?

Delphi-Referenz durchsuchenSystem.Pos liefert 0 zurück wenn nichts gefunden wurde. Siehe Docwiki.

Jumpy 17. Okt 2016 13:23

AW: "Pos" findet String wegen Einrückung nicht
 
Ich würde bei einer verschönerten Variante der ersten geposteten Funktion bleiben und Pos benutzen. Das IndexOf funktioniert in dem von die beschriebenen Szenario nicht.


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