IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Nettoyer chaines de caractères provenant d'un fichier CSV


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut Nettoyer chaines de caractères provenant d'un fichier CSV
    Bonjour à tous,

    Je suis face à un problème de traitement de données.

    En vue d'un import dans une table mysql je donne la possibilité à une catégorie d'utilisateurs d'envoyer un fichier CSV via un formulaire sur un site. Dans trois de ces colonnes j'ai un texte en saisie libre qui contient un nombre de caractères inconnues et pouvant contenir des caractères spéciaux (accents, ponctuations). Pour résumer je n'ai pas la main sur le contenue car saisie par via Excel.

    Du coups lors de l'import avec fgetcsv($handle, 1024, ";", "\"") j'ai du mal à récupérer correctement ces trois colonnes. Régulièrement il m'en manque car je peux avoir un " dans le contenu de la colonne. J'ai essayé de mettre un autre caractères d'encadrements mais c'est pas top car excel ne permet de choisir ce caractère lors de l'enregistrement.

    En gros c'est le serpent qui se mord la queue

    Est-ce que vous avez été confronté à ce problème ? Et comment l'avez vous géré ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Est-ce que le nombre de colonnes est fixe? Y-a-t-il systématiquement un header au début de ces fichiers CSV?

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    En plus de répondre aux 2 questions de CosmoKnacki, il serait intéressant de donner le code que tu as essayé et aussi un cas de ligne CSV qui pose problème.

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2008
    Messages : 235
    Points : 82
    Points
    82
    Par défaut
    Bon bah je crois vous avoir dérangé pour rien en fait.

    En faisant des recherches pour trouver un cas qui déconne je me suis rendu compte que les données étaient tronquées et que lors du "troncage" cela mettait le bazar pour les lignes suivantes. Le problème vient du paramètre length de fgetcsv. Sans trop prêter attention j'avais mis 1024 et forcement lorsqu'il arrive sur des lignes contenant des commentaires utilisateurs je dépasse largement les 1024 caractères.

    Du coups j'ai modifié en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgetcsv($handle, '', ";")
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgetcsv($handle, 1024, ";")
    Je pense que l'import est plus lent mais vu qu'il serait fait une fois par semaine l'impact est négligeable.

    Merci pour votre temps

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Rechercher et renommer une chaine de caractère complexe dans un fichier texte
    Par mrcanardwc dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 24/06/2011, 14h02
  2. Réponses: 5
    Dernier message: 31/05/2007, 20h35
  3. Réponses: 5
    Dernier message: 26/04/2007, 16h39
  4. Réponses: 2
    Dernier message: 13/04/2007, 18h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo