![]() |
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:
Ü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.
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; 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? |
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; |
AW: "Pos" findet String wegen Einrückung nicht
Sollte ein String 'BlaBlaBla' in einer Zeile (Stringlist[i]) enthalten sein so kommt
Delphi-Quellcode:
mit einem Wert >0 zurück!
pos
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:
oder
pos
Delphi-Quellcode:
da gibt es kaum bemerkbare aber wichtige Unterschiede!
.Indexof
|
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 |
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! |
AW: "Pos" findet String wegen Einrückung nicht
|
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). |
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
|
AW: "Pos" findet String wegen Einrückung nicht
Zitat:
![]() ![]() |
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 19:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz