hi!
wert1:http://www.url.de:wert3:etc...
wie weiße ich das Script an den Doppelpunkt in der URL zu übergehen, also keinen split durchzuführen?
Schwierig, da man im regulären Ausdruck in split ja nichts weiter unterscheiden kann (zb. benachbarte
Zeichen), da alles weitere in diesem Ausdruck ja beim splitten einfach weggeworfen wird. Oder gibt es da
eine Möglichkeit? Mir ist keine bekannt...
Ist es vielleicht möglich diesen Doppelpunkt als anderes Zeichen zu tarnen und dann später im HTML
Template wieder in einen Doppelpunkt umzuwandeln?
Das ist möglich. Du brauchst nur ein eindeutiges Erkennungszeichen für den Doppelpunkt. Das können
übrigens auch mehrere Zeichen sein, du die dann später ersetzt, zb. der String
"andieserstellestehteigentlicheindoppelpunktdersplitaberfalschzuordnenwürde"
Diesen String setzt du anstelle aller :-Zeichen in deiner Datenbank ein, die nicht als Trennzeichen zwischen
den Feldern dienen sollen. Später kannst du dann über jeden Wert jedes Feldes folgende s/ubst/titu/tion
laufen lassen:
s/andieserstellestehteigentlicheindoppelpunktdersplitaberfalschzuordnenwürde/:/i;
Ich weis das es nicht besonders sinnig ist Doppelpunkte als splits zu verwenden, aber andere Zeichen
wie "&", "§", "%", kommen noch häufiger in der DB vor... und da diese DB schon gut 100 zeilen Inhalt
umfasst, wäre es zu viel arbeit die splits jetzt noch zu ändern.
Im regulären Ausdruck für split kann man auch einen komplexeren Ausdruck eingeben, der zum splitten
verwendet werden soll, also nicht nur einzelne Zeichen. Du kannst zb. etwas in der Form verwenden:
@(:)@
Das setzt du einfach an Stelle aller Doppelpunkte, die als Trennzeichen gelten, in deiner Datenbank. Dann
verwendest du zum splitten folgenden Aufruf:
@liste = split /@\(:)\@/, $db_zeile;
Reservierte Zeichen müssen natürlich maskiert werden. Eine Ersetzung aller Doppelpunkte in der Datei
dürfte nicht so schwierig sein mit einem kleinen Perl-Skript oder auch einfach einem beliebigen Texteditor,
der Suchen und Ersetzen beherrscht.
Eine weitere Alternative: kommen nur in einem Feld zusätzliche Doppelpunkte vor, kannst du dieses Feld
als letztes Feld verwenden. An split kann man als letzten Parameter einen Wert übergeben, wie viele
Einzelwerte höchstens herauskommen sollen beim splitten.
$db_zeile = "feld1:feld2:http://www.tower.de";
@liste = split /:/, $db_zeile, 3;
ergibt also für @liste folgende Werte:
feld1, feld2 und http://www.tower.de
bye, Frank!