Récupération de colonnes dans un CSV et création d'un nouveau fichier

Petit nouveau ! | 3 Messages

25 janv. 2024, 18:18

Bonjour à tous.

J'ai un fichier CSV qui contient de nombreuses colonnes, avec comme séparateur !#
J'essaye depuis plusieurs jours de récupérer certaines colonnes et de recréer un fichier CSV propre, avec comme séparateur ;

Je bloque totalement...
Je suis parti d'un script déjà existant et je n'arrive vraiment pas à m'en sortir.
J'ai un niveau ridicule en PHP ! J'ai débuté il n'y a qu'une semaine.
<?php
if (($handle_result = fopen("Donnees_result.csv", "r")) !== FALSE) 
{
if (($handle = fopen("Donnees.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, "!#")) !== FALSE) {
        
fputcsv($handle_result, array($data[0], $data[1]));
    }
    fclose($handle);
}
 fclose($handle_result);
}
?>
Je n'ai pas eu d'erreur sur ce script, mais je n'ai aucun résultat non plus.
Aucune création de fichier Donnees_result.csv

Si quelqu'un pourrait m'aider.
Merci d'avance

Avatar du membre
Mammouth du PHP | 1609 Messages

25 janv. 2024, 19:47

Salut, il peut y avoir plusieurs causes à ce résultat.

Il faudrait t'assurer que le rapport d'erreur est bien activé, fonction error_reporting.
https://www.php.net/manual/fr/function. ... orting.php.

Pour créer un fichier avec fopen le mode "r" n'est pas bon, ça ouvre le fichier en lecture seule, utilise plutôt le mode "w".
https://www.php.net/manual/fr/function.fopen.php.

Sinon le script a l'air cohérent si ce n'est que le séparateur par défaut est la "," et non le ";".
https://www.php.net/manual/fr/function.fputcsv.php.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

25 janv. 2024, 21:12

Merci, c'était bien le mode "r" qui posait problème. Je n'y avais pas prêté attention.
Tu m'enlèves une épine du pied !

Sans vouloir abuser, j'ai aussi un autre problème...
Le séparateur de mon csv d'origine est !#
Et forcément, ça cause une erreur 500 lorsque je l'utilise dans le script PHP.
while (($data = fgetcsv($handle, 1000, "!#")) !== FALSE)
Y aurait-il un moyen de contourner ça ?

Avatar du membre
Mammouth du PHP | 1609 Messages

25 janv. 2024, 22:15

Si tu veux pas te prendre la tête, comme un bourrin tu fais un :
file_put_contents('Donnees.csv', str_replace('!#', ';', file_get_contents('Donnees.csv')));

Fais une copie du fichier avant au cas ou.

Ça peut être foireux si tu as des ; dans les valeurs, peut être pour ça que le séparateur a été définit à !#.

Sinon tu peux toujours lire le fichier ligne par ligne avec fgets et utiliser la fonction explode pour scinder la ligne en un tableau selon le séparateur de ton choix (tu pourras utiliser un séparateur à 2 caractères). Tant qu'une ligne "réelle" ne s'étale pas sur plusieurs ligne dans le fichier ça ne devrait pas poser de problème.
Développeur web depuis + de 20 ans

Petit nouveau ! | 3 Messages

26 janv. 2024, 00:21

Merci pour tout Saian.

Tout fonctionne correctement.