Pos(...

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Pos(...

Beitrag von Mathias »

Beim FPC 3.1, wurde bei Pos ein dritter Parameter eingeführt, man kann das Offset angeben, wo er mit suchen anfangen soll.

Folgendes spuckt 5 aus.

Code: Alles auswählen

  Caption := pos('a', 'abababababababababab', 5).ToString;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Pos(...

Beitrag von sstvmaster »

das ist schon richtig so Pos liefert ja Int zurück, also die Position des ersten vorkommens.

bei

Code: Alles auswählen

var
  s1: String;
  s2: String;
begin
  s1 := 'abababababababababababcabababababababababab';
  s2 := 'abababababababababab';
  Label1.Caption:=Pos('abc',s1,5).ToString;
  Label2.Caption:=Pos('a',s2,6).ToString;


ist s1 = 21, s2 = 7
Passt.

Der Offset legt halt nur den Start fest ab wo gesucht werden soll.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pos(...

Beitrag von Mathias »

Dies war keine Frage, sondern nur als Info gedacht? :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Pos(...

Beitrag von sstvmaster »

:oops: , dann hab ich nichts gesagt.
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Pos(...

Beitrag von Warf »

Dafür gabs bislang ja die Funktion PosEx aus den StrUtils. Finde ich gut das es jetzt in Pos direkt mit drin ist

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Pos(...

Beitrag von Mathias »

Da bin ich gerade über eine Stolperfalle gestolpert:

Code: Alles auswählen

  s :=  'abababababababababababcabababababababababab';
  ofs := 1;
  ...
  ofs := Pos('ab', s, ofs);
  ...

Ich hatte zuerst ofs := 0; , da wurde bei Pos immer 0 zurück gegeben, obwohl der Suchstring mehrmals vorhanden war.
Wichtig, man muss immer mit 1 beginnen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Pos(...

Beitrag von m.fuchs »

bart_simpson_string_index.png
bart_simpson_string_index.png (225.96 KiB) 2356 mal betrachtet

:mrgreen:
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

sstvmaster
Beiträge: 575
Registriert: Sa 22. Okt 2016, 23:12
OS, Lazarus, FPC: W10, L 2.2.6
CPU-Target: 32+64bit
Wohnort: Dresden

Re: Pos(...

Beitrag von sstvmaster »

@ m.fuchs +1
LG Maik

Windows 10,
- Lazarus 2.2.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 2.2.7 (fixes) + fpc 3.3.1 (main/trunk)

Antworten