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

PHP & Base de données Discussion :

LOAD DATA INFILE et séparateur de champs


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Par défaut LOAD DATA INFILE et séparateur de champs
    Bonjour,

    je dois importer un fichier csv sur lequel je n'ai aucun contrôle (fichier distant). Il s'agit d'une liste d'ouvrages (donc basiquement, un titre, un auteur, un résumé et quelques autres infos).
    Le séparateur de champ est ; mais il y a également des ; dans le résumé
    Le champ de texte ne sont pas entourés de quotes (ni simples, ni doubles).

    Le problème, évidemment, c'est que lorsque LOAD DATA INFILE rencontre un ; il le considère comme séparateur de champ (normal) et la suite est complètement décalée
    Ma question : comment éviter ça ?

    j'aimerais éviter d'avoir à faire un pré-traitement qui ralentirait l'exécution du script (et de toute façon, je ne vois pas vraiment comment je pourrais mieux détecter qu'un ; est dans du texte ou séparateur...)

    merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    LOAD DATA INFILE ne permet pas de traiter un CSV non valide.

    S'il n'y a qu'une seule colonne qui contient des ";", tu peux en PHP considérer les valeurs autour de cette colonne.
    Par exemple : titre; auteur; résumé; infoA; infoB
    Les deux premières valeurs sont titre et auteur
    Les deux dernières sont infoA et infoB.
    résumé est le regroupement des autres valeurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Par défaut
    je ne suis pas certaine qu'il n'y ait qu'une seule colonne "problématique" malheureusement (vu les infos fournies, je ne vois pas de raison particulière au fait qu'il y ait des ; dans autre chose que le résumé, mais il pourrait y en avoir dans la colonne "collection" ou "éditeur" par exemple)

    de toute façon le fichier présente aussi des gros souci d'encodage de caractères donc je me demande si, même sans ; anarchiques, il n'y aurait pas des risques de mauvais traitement à cause des caractères spéciaux bizarres

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu ne peux rien faire alors.
    A;B;C pourrait être A;B C ou A B;C ou même A;B;C
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé Avatar de Elianora la blanche
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 102
    Par défaut
    OK je vais donc essayer de trouver une autre solution
    merci

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Sans produire un CSV valide je ne vois pas ce que tu peux faire.
    Meme en lisant le CSV humainenement, tu aurais du mal à trouver le début et la fin de chaque colonne.

    La seule piste que je vois c'est si les espaces ou les majuscules sont respectés :
    aaaa;bbbb c'est une seule colonne
    aaaaa ; Bbbbbb c'est deux colonnes.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Problème LOAD DATA INFILE avec champs vide
    Par Tonii dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/08/2012, 14h02
  2. LOAD DATA INFILE et champs vides
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/09/2011, 00h19
  3. probleme avec "LOAD DATA INFILE" et les b
    Par Koo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/07/2004, 09h37
  4. Problème avec LOAD DATA INFILE
    Par ka0z dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/06/2004, 14h59
  5. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58

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