14. september 2005 - 15:20
Der er
12 kommentarer og
1 løsning
regex: opdele informationer i en tekststreng
Hej,
Jeg vil gerne have følgende tekststreng opdelt i et array, og de steder hvor der er flere data i ét felt (dem med " som tekstseparetor), skal også medtages - eventuelt som et array under overstående array:
Komma er separator og " er tekstseparator.
Der er 150 point samt en god flaske rødvin hvis nogle kan komme med en effektiv løsning.
Nedestående er én linje:
NS002,"1 Bærepose med logo",Pose,"60,00",1100,,"3,75",2710,"Netto",,,,,EUR,"""EUR,""""5,50"""",""""1 Bærepose med logo"""",1150,,bags,"",""DKS,""""60,00"""",""""1 Bærepose med logo"""",1110,S25,"",""DKT,""""60,00"""",""""1 Bærepose med logo"""",1120,S25,""",-10,0,200,"38554,5814479167","38607,5053211806",56,"3.052,50","""""",,0,,111
14. september 2005 - 15:44
#2
Prøver lige at beskrive systemet, det kan være en kende uoverskueligt.
Komma (,) adskiller.
Gåseøjne (") er tekstseparator, og der kan åbenbart være flere ved siden af hinanden.
Jeg ved ikke om det er nemmere at jeg fortæller hvad vil have - fortæller det med udgangspunkt i overstående eksempel, og bruger tal til at vise placeringer:
1 = NS002
2 = 1 Bærepose med logo
3 = Pose
4 = 60,00
9 = Netto
Og så vil jeg gerne have den pris der kommer efter DKS (60,00), prisen der kommer efter DKT (60,00).
Det er ikke på alle at DKT og DKS optræder, enkelte steder optræder de slet ikke og andre steder optræder de kun en af hver.
14. september 2005 - 17:05
#8
Kan du ikke få listen med f.eks. ; og ikke , og så stadig tal med 60,00?
Et problem vil f.eks. være dette:
"EUR,"
"5,50"
","
Der er ikke noget system i din liste som rent faktisk kan bruges?
14. september 2005 - 20:03
#10
Følgende giver et fint resultat:
function quotesplit( $splitter=',', $s, $restore_quotes=0 ){
$getstrings = explode('"', $splitter.$s.$splitter);
$delimlen = strlen($splitter);
$instring = 0;
while (list($arg, $val) = each($getstrings))
{
if ($instring==1)
{
if( $restore_quotes )
{
$result[count($result)-1] = $result[count($result)-1].'"'.$val.'"';
} else {
$result[] = $val;
}
$instring = 0;
}
else
{
$temparray = split($splitter, substr($val, $delimlen, strlen($val)-$delimlen-$delimlen) );
while(list($iarg, $ival) = each($temparray))
{
$result[] = trim($ival);
}
$instring = 1;
}
}
return $result;
}