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 :

Conversion massive de dates


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut Conversion massive de dates
    Bonjour,

    J'ai un fichier contenant 1450 lignes, chaque ligne contient une date au format français (jj/mm/aaaa)
    Je voudrais remplacer chaque ligne de ce fichier par la même date mais au format SQL (aaaa-mm-jj)

    voici mon code:
    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
    <?php 
     
    $fichier = @fopen('P:\php\dates.txt','r+');
    if (!$fichier) die("Impossible d'ouvrir le fichier"); 
     
    function dateUS($date) 
    	{ 		
    		$split = split("/",$date);
    		$jour = $split[0];
    		$mois = $split[1];
    		$annee = $split[2];
    		return  "$annee"."-"."$mois"."-"."$jour";	//retourne la date en US dans la variable date
    	}
     
    while (!feof($fichier)) // tant qu'on est pas à la fin du fichier texte.
    { 
    	$ligne = fgets($fichier, 500);
    	if (!feof($fichier)) $date=$ligne;
    	fputs($fichier,dateUS($date));
    }
    fclose($fichier); 
     
    ?>
    La fonction dateUS est surement bonne car lorsque je la teste seule, hors de la boucle while, elle me renvoie une date convertie correctement !
    Alors que lorsque j'execute mon code en partant de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    01/01/1992
    01/04/1996
    01/01/1998
    01/01/1998
    j'ai un resultat qui donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    01/01/1992
    1992
    -01-0101/01/1998
    1998
    -01-0101/01/1998
    1998
    -01-0101/09/1998
    C'est inexploitable....

    il zappe carrément le 1996...

  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
    Tu ne peux pas en meme temps lire un fichier et ecrire dedans ; la ton pointeur saute.
    Il faut que lises tout le fichier PUIS que tu le ré-ecrives.

    Au passage, tu fais deux fois le test !feof
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Merci pour ta reponse.
    J'ai modifié mon code maintenant je lis dans un fichier et écrit dans un autre le résultat.
    Voilà ce que j'obtient maintenant, il ne me reste plus qu'a trouver comment supprimer le caractère de saut de ligne après l'année...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1992
    -01-011996
    -04-011998
    -01-011998
    -01-011998

  4. #4
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Si ça peut servir voici mon code actuel:
    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
    <?php 
     
    $fichier = @fopen('P:\php\dates.txt','r+');  // chemin du fichier texte a ouvrir
    $fichier_US = @fopen('P:\php\dates_us.txt','a+');
    if (!$fichier) die("Impossible d'ouvrir le fichier"); 
    function dateUS($date) 
    	{ 		
    		$split = split("/",$date); //sépare les champs délimités par un "/" et les met ds un tableau contenu ds la variable split
    		$jour = $split[0];
    		$mois = $split[1];
    		$annee = $split[2];
    		return  "$annee"."-"."$mois"."-"."$jour";	//retourne la date en US dans la variable date
    	}
    while (!feof($fichier)) // tant qu'on est pas à la fin du fichier texte.
    { 
    	$ligne = fgets($fichier, 500); // tu lis la ligne
    	fputs($fichier_US,dateUS($ligne));
    }
    fclose($fichier); 
    fclose($fichier_US);
    ?>

  5. #5
    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 peux utiliser trim() sur ton $ligne
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Merci pour ton aide
    trim() est pas mal mais il faudrait que je trouve un juste milieu car je voudrais quand même avoir mes dates les unes sous les autres.

    Il faudrait que j'arrive à virer le saut de ligne après l'année et en rajoutter un après le jour pour que cela soit exploitable par phpmyadmin en csv

    Pour rajouter un saut de ligne dans un fichier texte c'est: "\r\n" ! ! ! ! ! youpi

  7. #7
    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
    Si tu veux produire du csv, tu as la fonction fputcsv()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Yeah !!!

    Merci pour tes pistes tu m'a vraiment bien aidé!!!!! j'ai enfin fini ce code sur lequel je me prenais la tête depuis hier !!!


    Merci merci merci bcp!

    Voici le code fonctionnel:
    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
    <?php 
     
    $fichier = @fopen('P:\php\dates.txt','r+');  // chemin du fichier texte a ouvrir
    $fichier_US = @fopen('P:\php\dates_us.txt','a+');
    if (!$fichier) die("Impossible d'ouvrir le fichier"); 
    function dateUS($date) 
    	{ 		
    		$split = split("/",$date); //sépare les champs délimités par un "/" et les met ds un tableau contenu ds la variable split
    		$jour = $split[0];
    		$mois = $split[1];
    		$annee = $split[2];
    		return  "$annee"."-"."$mois"."-"."$jour\r\n";	//retourne la date en US dans la variable date
    	}
    while (!feof($fichier)) // tant qu'on est pas à la fin du fichier texte.
    { 
    	$ligne = fgets($fichier, 500); // tu lis la ligne
    	fputs($fichier_US,dateUS(trim($ligne)));
    }
    fclose($fichier); 
    fclose($fichier_US);
    ?>
    Merci encore

  9. #9
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Et dire qu'excel resoud mon problème en 20secondes à peine.... je suis dégouté

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

Discussions similaires

  1. [D7][InterBase] conversion automatique de date
    Par Magnus dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/05/2005, 14h58
  2. Réponses: 8
    Dernier message: 05/02/2005, 16h38
  3. [date] conversion d'une date et compatibilité access
    Par WriteLN dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/01/2005, 14h03
  4. [CR] pb (concaténation/Conversion/Addition) sur date/heure
    Par marvel dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 20/12/2004, 15h31
  5. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36

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