Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 18:42 Der er 15 kommentarer og
1 løsning

splitte streng

Jeg skal splittet denne streng korrekt:
5="3,Domæne,1100,1,stk.,""120,00"",,""30,00"",""120,00"",""150,00""","10,""Webhosting 1"",1400,12,Måned,""30,00"",""280,00"",""20,00"",""80,00"",""100,00"""

Det er fra mit regnskabsprogram og skal have lavet en fil som gemmer info i MySQL.

Den første info jeg skal bruge er i dette tilfælde 5.
Det er ikke noget problem da jeg bare kan splitte den.

Herefter skal jeg bruge værdien 3. Så værdien domæne osv.

Mit problem ligger i at alle værdier er delt med , men der er oså , i priserne. Så hvis jeg laver en split(",",$var) så får jeg 2 resultater ved hver pris.

Selvfølgeligt kan disse bare joines bagefter men det er ikke godt nok da der kan ligge forskellige strenge i systemet.
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 18:43 #1
det der skal gøres er at der skal laves en split("",$var); som ikke splitter på , imellem "" ""
Avatar billede Slettet bruger
11. januar 2004 - 19:13 #2
Er det bare en tastefejl fra din side, der gør, at der er 3*" på den ene side af kommaet og kun 1*" på den anden side her:
""150,00""","10,""Webhosti

Og hvad med efter 10-tallet?

Hvis strengen ikke er konsekvent, er det ikke let at lave en pålidelig opsplitning af den.
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 19:31 #3
Det er lige det der e problemet. Den er ikke ens hele vejen igennem.. Men som jeg skriver skal der laves en split("",$var); som ikke splitter på , imellem "" ""
Avatar billede detox Nybegynder
11. januar 2004 - 19:34 #4
Det er det nærmeste jeg lige kan komme:

$str = '5="3,Domæne,1100,1,stk.,""120,00"",,""30,00"",""120,00"",""150,00""","10,""Webhosting 1"",1400,12,Måned,""30,00"",""280,00"",""20,00"",""80,00"",""100,00"""';
list($nr, $data) = split("=",$str);
preg_match_all("/\"(.*)\"/U", $data, $match);
echo "Nr: $nr<br /><br />\n\n";
echo "Data:";
$arr = array();
foreach ($match[1] as $item) {
    if (preg_match("/^\d+\,\d+$/", $item)) $arr[] = $item;
    else {
        $arr = array_merge($arr, split(",", $item));
    }
}
echo "<pre>";   
print_r($arr);
echo "</pre>";
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 19:45 #5
Den giver utroligt mange tomme resultater..

Kan man ikke lave en replace på de linier som starter og slutter med "" og erstatte dem med fx. <komma>.

Så splitte strengen med split(",",$var) og til sidst lave en replace på alle <komma> som udskriver kommaerne igen.

Er bare ikke så god til de regulære expressions
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 19:46 #6
eller det skal nok erstatte alt som starter med ,"" og slutter med ""
Avatar billede detox Nybegynder
11. januar 2004 - 19:48 #7
Her er de tomme felter fjernet:

list($nr, $data) = split("=",$str);
preg_match_all("/\"(.*)\"/U", $data, $match);
echo "Nr: $nr<br /><br />\n\n";
echo "Data:";
$arr = array();
foreach ($match[1] as $item) {
    if (preg_match("/^\d+\,\d+$/", $item)) $arr[] = $item;
    else {
        $arr = array_merge($arr, split(",", $item));
    }
}foreach ($arr as $item) {
    if (!empty($item)) $res[] = $item;
}
echo "<pre>";   
print_r($res);
echo "</pre>";
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 19:50 #8
Den går heller ikke.. Der kan jo forkomme tomme felter.. Den skal gerne følge en standard så det altid vil passe ind..

Kan du lave en ergi_replace som erstatter , mellem ,"" og ""
Avatar billede detox Nybegynder
11. januar 2004 - 19:52 #9
Hvad så med den her:
"",1400,12,Måned,""
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 19:55 #10
ohh.. havde ikke tænkt på at den gentager varer i saamme linie, så selvf. mangler den ved start på næste varer..
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 19:58 #11
Men de 3 værdier som ligger der skal faktisk splittes.. så det er helt i orden.
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 20:01 #12
Egentligt ligger der 10 værdier af gangen efter =
streng1:
"3,Domæne,1100,1,stk.,""120,00"",,""30,00"",""120,00"",""150,00"""

streng2:
"10,""Webhosting "",1400,12,Måned,""30,00"",""280,00"",""20,00"",""80,00"",""100,00"""

Det ser nu ud til at virke i alle de lister jeg har hvis man definere det som jeg skrev..
Avatar billede Slettet bruger
11. januar 2004 - 20:15 #13
OK, med den sidste post blev det pludseligt meget lettere at se systemet.

Jeg har ikke lige tid, men mon ikke detox kan finde på noget, der virker nu. (Så kan han heller ikke påstå, at jeg hugger hans point.;-) )
Avatar billede detox Nybegynder
11. januar 2004 - 20:46 #14
Jeg har dårlig tid lige nu.
Avatar billede Slettet bruger
11. januar 2004 - 20:50 #15
Så prøver jeg måske at se på det senere i aften.
Avatar billede sylvesternielsen Nybegynder
11. januar 2004 - 20:51 #16
Jeg har desværre ret travlt, så opretter et nyt spørgsmål med en mere sigende tekst end denne.

Det ligger her:
http://www.eksperten.dk/spm/450323
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester