Und natürlich geht ohne Prüfung vor Zugriff sowas nicht, wenn es zu wenige Teilstrings gibt.
Aber hier könnte man auch einfach dafür sorgen, dass die Anzahl immer stimmt.
ShowMessage((S + '###').Split(['#'])[3]);
"Effizient" meint hier also schöner "kurzer" Code und wenige/keine externen Abhängigkeiten?
Mir ging es nicht um Schönheit, sondern nur um wenige/keine externen Abhängigkeiten.
Wenn ich ein lauffähiges Beispiel liefern möchte, für das der Anwender mit den Delphi-Standard-Units auskommen soll, dann wäre s.split also ein Ersatz für das, was ich sonst verwende (meine sonst verwendete GetFieldStr-Funktion hat natürlich verschiedene Absicherungen und liefert auch das richtige zurück, wenn weniger Felder als vermutet da).
Aber ansonsten: Natürlich kann ich auf Prüfung vor Zugriff verzichten, wenn ich
definitiv weiß, dass der String mindestens die angeforderte Anzahl von Teilstrings enthält.