AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Pos" findet String wegen Einrückung nicht

Ein Thema von Freyr77 · begonnen am 17. Okt 2016 · letzter Beitrag vom 17. Okt 2016
Antwort Antwort
Seite 1 von 2  1 2      
Freyr77
(Gast)

n/a Beiträge
 
#1

"Pos" findet String wegen Einrückung nicht

  Alt 17. Okt 2016, 12:47
Delphi-Version: 10 Seattle
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?
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#2

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

  Alt 17. Okt 2016, 12:54
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;
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 17. Okt 2016, 12:57
Sollte ein String 'BlaBlaBla' in einer Zeile (Stringlist[i]) enthalten sein so kommt 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 pos oder .Indexof da gibt es kaum bemerkbare aber wichtige Unterschiede!
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (17. Okt 2016 um 12:59 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 17. Okt 2016, 12:57
[/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
Klaus
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#5

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

  Alt 17. Okt 2016, 13:01
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!

Geändert von Freyr77 (17. Okt 2016 um 13:03 Uhr)
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#6

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

  Alt 17. Okt 2016, 13:04
TRIM(SearchText);

http://www.delphibasics.co.uk/RTL.asp?Name=Trim
  Mit Zitat antworten Zitat
DelphendeElfen

Registriert seit: 27. Dez 2011
3 Beiträge
 
#7

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

  Alt 17. Okt 2016, 13:05
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).
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#8

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

  Alt 17. Okt 2016, 13:06
Käme Trim() für dich in Frage?

if Pos(SearchText, Trim(sList.Strings[Index])) > 0 then
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#9

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

  Alt 17. Okt 2016, 13:18
Liefert pos nicht -1 wenn nichts gefunden wurde?
Delphi-Referenz durchsuchenSystem.Pos liefert 0 zurück wenn nichts gefunden wurde. Siehe Docwiki.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#10

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

  Alt 17. Okt 2016, 13:23
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 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