Thread ~s findert string nicht wieder (2 answers)
Opened by mazorro at 2018-05-23 08:17

mazorro
 2018-05-23 08:17
#188433 #188433
User since
2018-05-13
2 articles
BenutzerIn
[default_avatar]
Hallo,
mir begegnet ein seltsames Phänomen.
Ich extrahiere einen Teilstring aus einer Zeichenkette per substr
Code: (dl )
1
2
3
4
5
6
if ($utfzeile =~ m/\"(.*)\"/)   
{
$anfstr = index($utfzeile,$hochkomma,0);
$endstr = index($utfzeile,$hochkomma, $anfstr +1);
$laenge = $endstr - $anfstr;
$teilzeile = substr($utfzeile,$anfstr, $laenge);

wenige Zeilen später möchte ich diesen Teilstring ersetzen

Code: (dl )
$utfzeile =~ s/$teilzeile/$neuzeile/;


jetzt wird dieser Teilstring aber nicht mehr gefunden.
das passiert immer dann wenn der String ein nicht UTF8 ZEichen enthält, in diesem Fall ein ü als xFC.
Ein encode vorher hilft auch nicht.

Weiß jemand, was da passiert und wie ich es abstelle ?

und zur Info: so sieht der Code-Abschnitt komplett aus
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
while ($utfzeile =~ m/\"(.*)\"/)

{
$anfstr = index($utfzeile,$hochkomma,0);
$endstr = index($utfzeile,$hochkomma, $anfstr +1);
$laenge = $endstr - $anfstr;
$teilzeile = substr($utfzeile,$anfstr, $laenge);
$neuzeile = $teilzeile;
$neuzeile =~ s/\,|\;|\|//g;
$neuzeile =~ s/$hochkomma//g;
$utfzeile =~ s/$teilzeile/$neuzeile/;

};


und zur weiteren Info: das Script entfernt potentielle Feldtrenner zwischen zwei Hochkommas und dann auch die Hochkommas, damit die Daten sauber von einer Teradata geladen werden können.

View full thread ~s findert string nicht wieder