réécrire un csv

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : réécrire un csv

Re: réécrire un csv

par duncan mac leod » 09 sept. 2020, 23:09

un var_dump($csv);
juste avant le foreach me donne ca
array(1747) { [0]=> array(21) { [0]=> string(3) "400" [1]=> string(6) "001035" [2]=> string(14) "048158B2564A80" [3]=> string(6) "DUPONT" [4]=> string(9) "JEAN" [5]=> string(0) "" [6]=> string(5) "45S20" [7]=> string(0) "" [8]=> string(8) "19850601" [9]=> string(8) "30001231" [10]=> string(0) "" [11]=> string(0) "" [12]=> string(6) "UF9710" [13]=> string(1) "F" [14]=> string(5) "fr-FR" [15]=> string(1) "1" [16]=> string(1) "0" [17]=> string(1) "0" [18]=> string(1) "0" [19]=> string(0) "" [20]=> string(0) "" }
et le contenu du csv de sortie
400,"1           ",048158B2564A80,DUPONT,JEAN,,45S20,,19850601,30001231,,,UF9710,F,fr-FR,1,0,0,"1                       ","New Value3",

réécrire un csv

par duncan mac leod » 09 sept. 2020, 22:54

bonjour

j'ai un fichier csv a réécrire

contenu du csv

400;001035;048158B2564A80;DUPONT;JEAN;;45S20;;19850601;30001231;;;UF9710;F;fr-FR;1;0;0;0;;

et je doit le transformer en fichier avec des champs de taille fixe (exemple colonne 1 longeur 3, colonne 2 14, etc..)
400001035 048158B2564A80 DUPONT

j'ai trouver la fonction qui permet ca (str_pad) mais je m'en sort pas
<?PHP
function read($csv){
    $file = fopen($csv, 'r');
    while (!feof($file) ) {
        $line[] = fgetcsv($file, 1024, ";");
    }
    fclose($file);
    return $line;
}
// Définir le chemin d'accès au fichier CSV
$csv = 'fichier.csv';
$csv = read($csv);

foreach($csv as $key => $value)
{
  //$csv[$key]['1'] = str_pad(print_r($csv[$key]['1']),12);
 // $csv[$key]['18'] = str_pad(print_r($csv[$key]['2']),24);
  $csv[$key]['19'] = 'New Value3';
}

echo '<pre>';
print_r($csv);
echo '</pre>';
$fp = fopen("export.csv", "w");
foreach($csv as $fields):
    fputcsv($fp, $fields);
endforeach;
fclose($fp);
?>
le print_r($csv) me donne
Array
(
[0] => Array
(
[0] => 400
[1] => 001035
[2] => 048158B2564A80
[3] => DUPONT
[4] => JEAN
[5] =>
[6] => 45S20
[7] =>
[8] => 19850601
[9] => 30001231
[10] =>
[11] =>
[12] => UF9710
[13] => F
[14] => fr-FR
[15] => 1
[16] => 0
[17] => 0
[18] => 0
[19] => New Value3
[20] =>
)

[1] => Array
le newvalue3 est un test mais quand je decommente les 2 lignes str_pad ca m'écrit 1 dans les champs 18 et 1 avec la bonne taille (pas visible dans le resultat plus bas)
[0] => Array
(
[0] => 400
[1] => 1
[2] => 048158B2564A80
[3] => DUPONT
[4] => JEAN
[5] =>
[6] => 45S20
[7] =>
[8] => 19850601
[9] => 30001231
[10] =>
[11] =>
[12] => UF9710
[13] => F
[14] => fr-FR
[15] => 1
[16] => 0
[17] => 0
[18] => 1
[19] => New Value3
[20] =>
)

[1] => Array
merci de votre aide