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

EDI, CMS, Outils, Scripts et API PHP Discussion :

importer fichier txt problème de date


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut importer fichier txt problème de date
    bonjour à tous
    j'importe un fichier txt grace à la requête LOAD DATA INFILE dans phpmyAdmin.
    Ce fichier txt est obtenu suite à une conversion d'un fichier qui est à la base en csv.(je l'ouvre avec notepad et je l'enregistre en txt).
    ce fichier comprend notamment un champ au format date qui n'est pas forcément renseigné.
    lorsque j'essai de l'importer il me décèle une erreur dans la première ligne qui est une ligne ou ce champs est nul.
    j'ai vérifié la structure de ma table et tout est ok à ce niveau.
    Le problème vient-il du mauvais format du champs date à l'origine?
    lorsque j'ouvre mon fichier csv avec excel j'essai de changer le format de la date pour le mettre sous le format reconnu par SQL (Annee-Mois-Jour) mais cela ne changer rien j'ai toujours cette erreur.
    Que dois-je faire?

    Merci à tous

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par docteurdorian Voir le message
    j'importe un fichier txt grace à la requête LOAD DATA INFILE dans phpmyAdmin.
    Ce fichier txt est obtenu suite à une conversion d'un fichier qui est à la base en csv.(je l'ouvre avec notepad et je l'enregistre en txt).
    MySQL peut importe directement un CSV.

    ce fichier comprend notamment un champ au format date qui n'est pas forcément renseigné.
    lorsque j'essai de l'importer il me décèle une erreur dans la première ligne qui est une ligne ou ce champs est nul.
    Le champ contenant la date accepte les valeurs NULL ??

    j'ai vérifié la structure de ma table et tout est ok à ce niveau.
    Bon, je suppose que oui

    Le pb vient-il du mauvais format du champs date à l'origine?
    Difficile de te répondre car pas de message d'erreur mentionné.

    lorsque j'ouvre mon fichier csv avec excel j'essai de changer le format de la date pour le mettre sous le format reconnu par SQL (Annee-Mois-Jour) mais cela ne changer rien j'ai toujours cette erreur.
    Que dois-je faire?
    Nous donner la requête de création de la table de destination, la commande MySQL LOAD DATA utilisée, le message d'erreur retourné dans ton cas et un extrait du fichier nous permettant de reproduire l'erreur pour tests

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    seb,
    voila les indications demandées :
    requête sql : LOAD DATA INFILE "011.txt" INTO TABLE generale
    fields terminated by ";"

    erreur retournée par phpmyadmin : erreur#1292 incorrect date value: ' ' for column 'date_AV' at row 1

    pour un extrait de mon fichier j'avoue que je n'utilise pas souvent de forum, comment puis-je t'en donner un?

    merci beaucoup

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    En le copiant/collant ici.

    erreur retournée par phpmyadmin : erreur#1292 incorrect date value: ' ' for column 'date_AV' at row 1
    Il semblerait que le champ date de ton CSV contienne un caractère blanc.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Citation Envoyé par Séb. Voir le message
    En le copiant/collant ici.


    Il semblerait que le champ date de ton CSV contienne un caractère blanc.

    pas forcement si le format de date n'est pas correct l'erreur sera la même donc ils nous faut un exemple de ligne de son csv .

    Ensuite plusieurs solutions:
    - soit tu passe le champ date de ta table en varchar
    - soit tu fais un traitement sur ton fichier pour le formater correctement et ensuite tu fais le load data
    - soit tu parcours ton fichier et tu insers ligne par ligne en php ( la plus lourde je pense..)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    voici un exemple de mon fichier csv :
    11;1;25;50;5;13713;COUDE PVC MALE FEMELLE 22 DEG D100MM;8834;GIRPI SA;A;;

    11;1;24;5;20;302603;VIS PARISIENNE TETE RONDE 6X60 BTE 20;200122;BOL;S;20/09/2007;

    la première ligne est un ex avec le champs date vide et la seconde avec un champs date rempli

    pour l'instant j'ai fait l'import avec le champs date en "TEXT" mais j'ai besoin de l'importer au format date parce qu'ensuite je fais des requetes sql au sein de tableaux php ou je compare ces dates par rapport à la date du jour.

    merci

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    tu as donc deux soucis:
    1- des champs dates vide
    2- des dates non formatées car mysql attends des dates aux formats aaaa-mm-jj

    pour le premier il faut que tu acceptes les champs null pour ton champ date comme seb te le disait

    pour le deuxième un petit traitement du fichier en php s'impose

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    salut boo64

    pour le premier il faut que tu acceptes les champs null pour ton champ date comme seb te le disait
    c'est fait depuis le début (c'est ce que j'entendais par "j'ai vérifié la structure de ma table" dans mon 1er message désolé je ne m'exprime pas forcément clairement)
    quand j'essai de modifier le type du champs qui pour l'instant est de type TEXT en date il me renvoie cette erreur en me disant qu'il y a une valeur incorrect dans la ligne 1. vraiment je ne comprend pas!

    pour le deuxième un petit traitement du fichier en php s'impose
    quelle manip?

    edit : je viens de tester avec un exemple simple et c'est bien le champs date vide qui pose problème lors de la requete LOAD DATA INFILE
    il doit y avoir un traitement à faire sur le fichier csv ou ailleurs pour contrer ce problème ??
    merci
    merci

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut doc
    Citation Envoyé par docteurdorian Voir le message
    c'est fait depuis le début (c'est ce que j'entendais par "j'ai vérifié la structure de ma table" dans mon 1er message désolé je ne m'exprime pas forcément clairement)
    quand j'essai de modifier le type du champs qui pour l'instant est de type TEXT en date il me renvoie cette erreur en me disant qu'il y a une valeur incorrect dans la ligne 1. vraiment je ne comprend pas!
    Peut-être parceque MySQL ne traite pas la chaîne vide en tant que NULL, tu te retrouves donc avec une date "" invalide. A tester.

    De quelle version de MySQL disposes-tu ? Tu peux peut-être faire un TRIGGER BEFORE INSERT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF NEW.champDate = "" THEN
        SET NEW.champDate = NULL ;
    END IF ;
    [EDIT] Doc sur le triggers : http://dev.mysql.com/doc/refman/5.1/...e-trigger.html

    pour le deuxième un petit traitement du fichier en php s'impose
    quelle manip?
    Par exemple un preg_replace_all( ) qui remplacerait tous les ;jj/mm/aaaa; par ;aaaa-mm-jj;.
    http://fr.php.net/preg-replace-all

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    merci seb
    d'abord pour le format des dates c'est bon le problème est réglé (en modifiant le csv)

    le vrai problème reste c'est à dire les champs vides.
    donc j'ai testé ta requete et il m'indique une erreur de syntaxe. peux tu m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF NEW.champDate = "" THEN
    Set NEW.champDate = NULL;
    END IF
    LOAD DATA INFILE "RR.txt" INTO TABLE essai
    fields terminated by ";"
    voila ce que j'ai tapé

    merci

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    sinon voila pour resoudre les deux problemes d'un coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    		$lines = file($chemin, FILE_SKIP_EMPTY_LINES) ; 
    		$buffer =""
    		foreach ( $lines as  $line ) {
    			$tab = explode(";", $line);
    			//on formate le champ date qui est le dernier champ le 12eme
    			if ($tab[11] = ''){ 
    			//si date vide vu que l'option null fonctionne mal
    			$tab[11]='0000-00-00';
    			}else{
    			//formatage type mysql aaaa-mm-jj
    			$tab[11]=preg_replace('<^([0-9]{2})/([0-9]{2})/([0-9]{4})$>','\\3-\\2-\\1', $tab[11]);
    			}		
    			$line=implode(';',$tab);
    			$buffer.= $line;
    		}
    		//ecriture fichier
    		file_put_contents  (  $chemin  ,$buffer);
    ps: je n'ai pas eu le temps de tester le bout de code

  12. #12
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par docteurdorian Voir le message
    le vrai pb reste c'est à dire les champs vides.
    donc j'ai testé ta requete et il m'indique une erreur de syntaxe. peux tu m'aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF NEW.champDate = "" THEN
    Set NEW.champDate = NULL;
    END IF
    LOAD DATA INFILE "RR.txt" INTO TABLE essai
    fields terminated by ";"
    voila ce que j'ai tapé
    Les triggers/déclencheurs ne s'utilisent pas ainsi.
    D'abord il faut t'assurer que ton serveur MySQL les supporte.
    Ensuite il faut créer le déclencheur avec CREATE TRIGGER, des exemples sont fournis dans la doc http://dev.mysql.com/doc/refman/5.1/...e-trigger.html

  13. #13
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    PS : la doc de MySQL 5.0 est traduite en français http://dev.mysql.com/doc/refman/5.0/...e-trigger.html

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    merci à tous les deux
    je vais commencer par tester la version de boo qui règle les deux problèmes d'un seul coup mais juste une précision ma table contient en fait beaucoup d'autre champs derrière le champ date (je les avais effacé pour l'exemple)
    quel partie de ton code dois-je modifier (étant donné que tu précises que l'on formate le champ date qui est le dernier)

    merci beaucoup boo64

    et merci à toi seb je vais également tester le trigger

    seb,
    je teste je teste le trigger mais ca ne marche pas
    pourrais tu si tu as deux minutes me montrer le code de la requête pour que je comprenne vraiment comment marche cette manipulation?

    merci d'avance pour ta patience

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    le $tab[11] tu le remplace par la bonne position de ton champ date dans ta ligne

  16. #16
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par docteurdorian Voir le message
    je teste je teste le trigger mais ca ne marche pas
    Laisse tomber, MySQL vérifie le format de la valeur soumise et lève l'erreur avant même l'appel au TRIGGER, je viens de tester
    Pour les champs vides il faudra passer par du PHP.

  17. #17
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 233
    Points : 79
    Points
    79
    Par défaut
    Bonjour à tous,
    Je suis sous mysql 5.1.52 qui supporte les triggers et j'essaie depuis un moment de rajouter un trigger sur ma table "table_PsP" afin que les insertions se fassent seulement quand il n'ya pas d'enregistrement ayant la clé bicq. voici le trigger en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    delimiter // 
    CREATE TRIGGER insert_check BEFORE insert ON table_PsP 
    FOR EACH ROW 
    BEGIN 
    IF NEW.bicq in(select  bicq from table_PsP)  THEN 
    SET NEW.maj = old.maj+1;
    set old.nixe=new.nixe;
    set old.bicq=new.bicq;
    set old.kern=new.kern;
    set old.born=new.born;
    set old.date=new.date;
    set old.Hour1=new.Hour1;
    set set old.Hour2=new.Hour2;
    end
    ELSEIF 
    begin
    SET NEW.maj = 0;
    set old.nixe=new.nixe;
    set old.bicq=new.bicq;
    set old.kern=new.kern;
    set old.born=new.born;
    set old.date=new.date;
    set old.Hour1=new.Hour1;
    set set old.Hour2=new.Hour2;
    End 
    END IF; 
    END// 
    delimiter ;
    Et voici le message d'erreur qui est genéré.

    #1363 - There is no OLD row in on INSERT trigger

    Merci infiniment

Discussions similaires

  1. [AC-2010] Problème d'import fichier txt contenant des caractères spéciaux
    Par stsym dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/03/2014, 06h08
  2. Import fichier .txt et format de date
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 01/11/2013, 15h29
  3. [AC-2000] Problème Import fichier .txt dans une table Access
    Par sylviobarca dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/12/2010, 18h17
  4. Problème import fichier.txt
    Par ndundux dans le forum Import/Export
    Réponses: 4
    Dernier message: 23/09/2008, 18h12
  5. [SQLServer]Script import fichier .txt
    Par Jenbi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2006, 17h49

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