NZwischen

Verweis: Zwischen
Uses: StrUtils
Eingabe: Anfang,Ende(Integer),Text(String),Vorkommen(Integer)
Ausgabe: Text(String)
Funktion: Gibt den Text Zwischen den Anfangs- und den Ende-String zurück. Optional mit der Angabe des Vorkommen als Index.

Diese Funktion ist eine Erweiterung von Zwischen. Sie bedient sich der Funktion NPos was dazu führt, dass wir die Unit StrUtils Einbinden müssen. Das diese Funktion dort steht.

//Mit Uses StrUtils
function NZwischen(Anfang, Ende, Text: ShortString;
  Vorkommen: integer = 1): ShortString;
var
  Position: integer;
  Teil: string;
begin
  Result := '';
  Position := NPos(Anfang, Text, Vorkommen);
  if Position = 0 then Exit;
  Teil := Copy(Text, Position + length(Anfang), length(Text));
  Position := Pos(Ende, Teil);
  if Position = 0 then Exit;
  Delete(Teil, Position, length(Teil));
  Result := Teil;
end;

Hier wird ein String zurück gegeben, wenn das Anfangs-Zeichen oder der Anfangs-String vorhanden und Ende-Zeichen oder String vorhanden ist. Wenn nicht dann gibt es einen Leerstring. Es kann zusätzlich der Parameter „Vorkommen“ angegeben werden. Dieser Parameter steht Default auf 1, welches das erste Vorkommen des Anfangs-Textes sucht. Diese Funktion sollte nur verwendet werden wenn man auch eine andere Zahl als 1 benötigt. Denn ansonsten wäre die Funktion Zwischen besser, denn hier wird auch die Unit „StrUtils“ nicht benötigt.

Aufruf 1

Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie einen TButton und ein TEdit auf die Form. Binden Sie die Unit StrUtils mit der Uses-Klausel in die Anwendung ein. Doppelklicken sie auf den Button und ersetzen Sie das Ereignis durch folgenden Quelltext:

procedure TForm1.Button1Click(Sender: TObject);
const
  HTMLText = '<p><a href="http://www.w3.org/"><img alt="W3C" height="48"' +
    'src="http://www.w3.org/Icons/w3c_home" width="72"></a></p>';
begin
  Edit1.Text := NZwischen('"http://', '"', HTMLText);
  if Edit1.Text = '' then
    ShowMessage('Ich habe den Text nicht gefunden.');
end;

In dem Aufruf gibt die Funktion das gleiche Ergebnis wie bei Zwischen wieder. Da hier von Default 1 ausgegangen wird. Wenn Sie jedoch die Codezeile:

  Edit1.Text := NZwischen('"http://', '"', HTMLText); 

In:

  Edit1.Text := NZwischen('"http://', '"', HTMLText,2); 

ändern.
Dann erhalten Sie auch das 2. Vorkommen der Suche.

Die Funktion ist Case-sensitive, es wird also die Groß- Kleinschreibung beachtet. Außerdem kann die Funktion mit Umlauten umgehen.

Aufruf 2

Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie einen TButton und ein TMemo auf die Form. Binden Sie die Unit StrUtils mit der Uses-Klausel in die Anwendung ein. Doppelklicken sie auf den Button und ersetzen Sie das Ereignis durch folgenden Quelltext:

procedure TForm1.Button1Click(Sender: TObject);
const
  HTMLText = '<p><a href="http://www.w3.org/"><img alt="W3C" height="48"'
    + 'src="http://www.w3.org/Icons/w3c_home" width="72"></a></p>';
var
  Teil: string;
  z: integer;
begin
  // Vorkommen Zähler auf 1 setzen
  z := 1;
  memo1.Clear;
  repeat
    //Hole alle Textteile
    Teil := NZwischen('="', '"', HTMLText, z);
    //Erhöhe den Zähler für den nächsten Durchlauf
    Inc(z);
    Memo1.Append(Teil);
    // Wiederhole solange, bis der String leer ist.
  until Teil = '';
end;

Der zweite Aufruf erzeugt das Ergebnis wie in dem Bild. Unter diesem Text.

Lazarus PrIn Funktion NZwischen
Eigene Funktion NZwischen

Es werden sämtliche Werte zwischen den Anführungszeichen ausgegeben. Wenn Sie nur die Internet-Adressen haben wollen, dann sollten sie die Befehlszeile mit dieser hier ersetzen.

    Teil := NZwischen('="http://', '"', HTMLText, z);

Wenn Ihre Strings die Länge von 255 Zeichen übersteigen, was durch aus möglich sein kann. So sollten Sie auch hier den Variablen Typ von ShortString in String umschreiben. Denn sonst endet die Suche bei 255 Zeichen und der Rest ihres Strings wird ignoriert.