Bonjour à tous,
j'ai un webservice qui me crache des données sous cette forme:
avec souvent beaucoup plus de lignes (et le nombre de colonnes peut être variable)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 "JAHR";"PERIODE";"VERSION";"EINHEIT";"PARTNER";"KATEGORIE";"GUV-KZ";"AUFTRAG";"BELEGNR";"BELEGART";"SATZNUMMER EINZELPOSTENSATZ";"LEDGER";"SATZART";"BUCHUNGSKREIS";"HERKUNFTSOBJEKT";"VORGANG";"EMPFAENGER OBJEKTART";"REFERENZBELEGNUMMER";"BUCHUNGSTEXT";"DEBITOR";"DEBITORNAME";"KREDITOR";"KREDITORNAME";"BETRAG IN EUR";"#VALUE"\r\n "2014";"5";"IST";"A100000";"Extern";"NA";"0000041310";"000050008680";"0011263941";"A";"000000000045695588";"8A";"0";"2383";"03";"RMRP";"00";"5105632164";"Kopierpapier ECONOMY, A4, 80 g/qm, ";"-194.25";"-0.19425"
mon but ce serait d'effectuer un traitement dans la seconde ligne sur les 2 dernières colonnes (entre autres remplacer le "." par une ",") ; en sortie j'ai besoin d'exactement du même format (avec les guillemets et les points virgules), c'est à dire:
j'ai essayé plusieurs méthodes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 "JAHR";"PERIODE";"VERSION";"EINHEIT";"PARTNER";"KATEGORIE";"GUV-KZ";"AUFTRAG";"BELEGNR";"BELEGART";"SATZNUMMER EINZELPOSTENSATZ";"LEDGER";"SATZART";"BUCHUNGSKREIS";"HERKUNFTSOBJEKT";"VORGANG";"EMPFAENGER OBJEKTART";"REFERENZBELEGNUMMER";"BUCHUNGSTEXT";"DEBITOR";"DEBITORNAME";"KREDITOR";"KREDITORNAME";"BETRAG IN EUR";"#VALUE"\r\n "2014";"5";"IST";"A100000";"Extern";"NA";"0000041310";"000050008680";"0011263941";"A";"000000000045695588";"8A";"0";"2383";"03";"RMRP";"00";"5105632164";"Kopierpapier ECONOMY, A4, 80 g/qm, ";"-194,25";"-0,19425"
1/ avec str_csv :
ça fonctionne mais il faut que je remette les guillemets et que je reimplose 2 fois, 1 pour les ";" et l'autre pour les \r\n. or pour des raisons de performances je souhaiterais me passer d'une ou deux itérations supplémentaire sur le tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $mystring='"JAHR";"PERIODE";"VERSION";"EINHEIT";"PARTNER";"KATEGORIE";"GUV-KZ";"AUFTRAG";"BELEGNR";"BELEGART";"SATZNUMMER EINZELPOSTENSATZ";"LEDGER";"SATZART";"BUCHUNGSKREIS";"HERKUNFTSOBJEKT";"VORGANG";"EMPFAENGER OBJEKTART";"REFERENZBELEGNUMMER";"BUCHUNGSTEXT";"DEBITOR";"DEBITORNAME";"KREDITOR";"KREDITORNAME";"BETRAG IN EUR";"#VALUE"' . "\r\n"; $mystring.='"2014";"5";"IST";"A100000";"Extern";"NA";"0000041310";"000050008680";"0011263941";"A";"000000000045695588";"8A";"0";"2383";"03";"RMRP";"00";"5105632164";"Kopierpapier ECONOMY, A4, 80 g/qm, ";"-194.25";"-0.19425"'; $array1=str_getcsv($mystring,"\r\n"); $array2=array_map(function ($theArray) { $theArrayCsvToArray=str_getcsv($theArray,';','"'); $theValue1=$theArrayCsvToArray[count($theArrayCsvToArray)-1]; $theValue1=str_replace('.',',',$theValue1); $theValue1=(strpos($orig,'E'))?substr($theValue1,0,strpos($theValue1,'E')):$theValue1; $theValue2=$theArrayCsvToArray[count($theArrayCsvToArray)-2]; $theValue2=str_replace('.',',',$theValue2); $theValue2=(strpos($orig,'E'))?substr($theValue2,0,strpos($theValue2,'E')):$theValue2; $theArrayCsvToArray[count($theArrayCsvToArray)-1]=$theValue1; $theArrayCsvToArray[count($theArrayCsvToArray)-2]=$theValue2; return $theArrayCsvToArray; } ,$array1); print_r($array2);
2/ en recherchant la position de chaque "\r\n" pour ensuite remonter aux 2 dernières colonnes mais ca n'est pas très pratique...
auriez vous une idée plus simple pour faire ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $mystring='"JAHR";"PERIODE";"VERSION";"EINHEIT";"PARTNER";"KATEGORIE";"GUV-KZ";"AUFTRAG";"BELEGNR";"BELEGART";"SATZNUMMER EINZELPOSTENSATZ";"LEDGER";"SATZART";"BUCHUNGSKREIS";"HERKUNFTSOBJEKT";"VORGANG";"EMPFAENGER OBJEKTART";"REFERENZBELEGNUMMER";"BUCHUNGSTEXT";"DEBITOR";"DEBITORNAME";"KREDITOR";"KREDITORNAME";"BETRAG IN EUR";"#VALUE"' . "\r\n"; $mystring.='"2014";"5";"IST";"A100000";"Extern";"NA";"0000041310";"000050008680";"0011263941";"A";"000000000045695588";"8A";"0";"2383";"03";"RMRP";"00";"5105632164";"Kopierpapier ECONOMY, A4, 80 g/qm, ";"-194.25";"-0.19425"' . "\r\n"; $mystring.='"2014";"5";"IST";"A100000";"Extern";"NA";"0000041310";"000050008680";"0011263941";"A";"000000000045695588";"8A";"0";"2383";"03";"RMRP";"00";"5105632164";"Kopierpapier ECONOMY, A4, 80 g/qm, ";"-194.25";"-0.19425"'; $needle = "\r\n"; $lastPos = 0; $positions = array(); while (($lastPos = strpos($mystring, $needle, $lastPos))!== false) { $positions[] = $lastPos; $lastPos = $lastPos + strlen($needle); } print_r($positions);
D'avance merci !
Partager