Question

Existe-t-il une fonction native ou une classe / bibliothèque solide pour écrire un tableau sous forme de ligne dans un fichier CSV sans enceintes? fputcsv passera par défaut à " si rien n'est transmis pour le paramètre enclosure. Google me manque (en renvoyant les résultats de tout un tas de pages sur fputcsv ), et les bibliothèques de PEAR font plus ou moins les mêmes choses que fputcsv .

Quelque chose qui fonctionne exactement comme fputcsv , mais permet aux champs de rester sans citation.

actuellement: "champ 1", "champ 2", champ3 n'a pas d'espaces

souhaité: champ 1, champ 2, champ3 n'a pas d'espaces

Était-ce utile?

La solution

Les avertissements concernant les enceintes précédentes sont valides, mais vous avez dit qu'ils ne s'appliquaient pas à votre cas d'utilisation.

Je me demande pourquoi vous ne pouvez pas utiliser quelque chose comme ça?

<?php
$fields = array(
    "field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");

Autres conseils

fonctionne avec la fonction chr () :

fputcsv($f,$array,',',chr(0));

fputcsv ($ fichier, $ données, ';', chr (127));

Cela ne fonctionne-t-il pas?

fputcsv($fp, split(',', $line),',',' ');

Eh bien, car (0) n'a pas fonctionné, car la valeur NULL va probablement étouffer la plupart des analyseurs au format csv.

J'ai fini par utiliser fputcsv () pour construire le fichier initial, puis j'ai supprimé et supprimé tous les guillemets. Élégant? Peut-être pas, mais le travail a été fait:).

<?php       

$filename = "sample.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, ['column 1','column 2']);
$data = ['sample','data'];

fputs($handle, implode($data,',')."\n");

// or

fwrite($handle, implode($data,',')."\n");

fclose($handle);
$headers = array(
    'Content-Type' => 'text/csv',
);

J'utilise un moyen délicat pour supprimer les guillemets, mais uniquement sous Linux

....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');

C’est ce que j’utilise pour mettre un fichier CSV standard dans un tableau ...

function csv_explode($delim=',', $str, $enclose='"', $preserve=false){
        $resArr = array();
        $n = 0;
        $expEncArr = explode($enclose, $str);
        foreach($expEncArr as $EncItem){
                if($n++%2){
                        array_push($resArr, array_pop($resArr) . ($preserve?$enclose:'') . $EncItem.($preserve?$enclose:''));
                }else{
                        $expDelArr = explode($delim, $EncItem);
                        array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
                        $resArr = array_merge($resArr, $expDelArr);
                }
        }
        return $resArr;
} 

Vous pouvez ensuite sortir ce que vous voulez dans une boucle foreach.

L’inconvénient d’un fichier CSV sans encadrement signifie qu’une virgule erronée dans la saisie de l’utilisateur modifiera la ligne. Vous devrez donc supprimer les virgules avant d'écrire une ligne CSV.

La difficulté avec la gestion des fichiers CSV consiste à analyser les boîtiers, ce qui rend PHP & amp; PEAR CSV fonctionne très bien. Vous recherchez essentiellement un fichier délimité par des virgules pour les colonnes et délimité par des lignes pour les lignes. Voici un point de départ simple:

<?php
$col_separator= ',';
$row_separator= "\n";

$a= array(
 array('my', 'values', 'are', 'awes,breakit,ome'),
 array('these', 'values', 'also', "rock\nAND\nROLL")
);

function encodeRow(array $a) {
 global $col_separator;
 global $row_separator;
 // Can't have the separators in the column data!
 $a2= array();
 foreach ($a as $v) {
  $a2[]= str_replace(array($col_separator, $row_separator), '', $v);
 }
 return implode($col_separator, $a2);
}

$output= array();
foreach ($a as $row) {
 $output[]= encodeRow($row);
}

echo(implode($row_separator, $output));

?>

chr (0) a également fonctionné pour moi:

 fputcsv($fp, $aLine, $sDelimiter, chr(0));

Je l'ai compris. En passant le code ascii pour Null à la fonction car () , il semble fonctionner parfaitement.

fputcsv ($ f, $ tableau, $ délimiteur, voiture (0))

Merci pour les réponses à tous !!!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top