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 :

file reader/file writer comment boucler [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Par défaut file reader/file writer comment boucler
    Bonjour à tous,

    j'ai un fichier text qui ressemble a ceci:

    AN Xixerella

    AN Vila

    AN Sornas

    AN Soldeu

    AN Sispony

    AN Segudet

    AN El Tarter

    AN Sant Julia de Loria

    AN Sant Joan de Caselles
    sauf que j'ai un peu plus de 2 millions de lignes

    et je voudrais transformer ça en un insert sql

    pour testé rapidement je n'utilise que les 2 premiers éléments.... (du moins j'essaie)

    voila ce que j'ai fait jusqu'a maintenant:

    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
    <?php
    $file = "cities.txt";
    $file_w = "cities.sql";
    $f = fopen($file, "r");
    $nf = fopen($file_w, "w+");
     
    for($l = 0; $l<2; $l++){
     
        $line = fgets($f);
        $ex = preg_split('/\s+/', $line);
     
        foreach($ex as $k => $v){
     
            echo $ex[0].' '. $ex[1];
            echo '<br>';
     
            $fw = fwrite($nf, "('" . $ex[0] . "','"  . $ex[1] . "')\r\n");
     
        }
    }
     
     
     
     
    fclose($f);
    fclose($nf);
    ?>
    mais le problem c'est que dans mon fichier cities.sql j'ai ceci

    ('AN','Xixerella')

    ('AN','Xixerella')

    ('AN','Xixerella')

    ('AN','Vila')

    ('AN','Vila')

    ('AN','Vila')

    j'ai bien compris que c'était due au 2 qui est dans ma boucle for mais comment je peux fiare autrement?
    j'ai aussi essayé des trucs dans ce genre


    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
    $file = "cities.txt";
    $file_w = "cities.sql";
    $f = fopen($file, "r");
    $nf = fopen($file_w, "w+");
     
    while ($line = fgets($f, 4096000))  {
            // echo $line;
        $ex = preg_split('/\s+/', $line);
       // var_dump($ex);die();
        foreach($ex as $k => $v){
     
            // echo $ex[0].' '. $ex[1];
            // echo '<br>';
     
            $fw = fwrite($nf, "('" . $ex[0] . "','"  . $ex[1] . "')\r\n");
        }
    }
     
    fclose($f);
    fclose($nf);
    résultat identique. la parcontre j'ai pas compris il me mettait 3 fois les meme choses
    mercii

  2. #2
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    Bonjour,

    Ceci devrais vous satisfaire

    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
    29
    30
     
    <?php
    $file = "cities.txt";
    $file_w = "cities.sql";
     
    $handle = fopen($file, 'r');
    $nf = fopen($file_w, "w+");
     
    if($handle){
     
    	// décommenter while pour lire le fichier complet
    	//while (!feof($handle))
    	for($i=0;$i<=2; $i++)
    	{
    		/*On lit la ligne courante*/
    		$buffer = fgets($handle);
    		$ex = preg_split("/[\s]+/", $buffer, 2, PREG_SPLIT_NO_EMPTY);
    		/*On l'affiche*/
    		if(!empty($ex)){
    			echo $ex[0].' '. $ex[1];
    			echo '<br>';
    			$fw = fwrite($nf, "('" . trim($ex[0]) . "','" . trim($ex[1]) . "')\r\n");
    		}
    	}
     
    	fclose($handle);
    	fclose($nf);
     
    }
    ?>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Par défaut gooooood
    parfait merci.

    Mais pourquoi est-ce que j'avais 3 enregistrement de chaque entrée?

  4. #4
    Membre averti
    Inscrit en
    Juin 2013
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 37
    Par défaut
    Bonjour,

    Tous simplement car avec preg_split il faut préciser qu'il n'interprète pas les caractère vide de plus tu faisais une boucle dans une autre boucle donc le script te dupliquer les entrées.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Par défaut
    ok. merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/12/2014, 15h23
  2. Réponses: 4
    Dernier message: 11/01/2008, 21h37
  3. [Coldfusion] Java File Reader sur un tres long fichier
    Par dehian dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/12/2007, 10h03
  4. Java File Reader sur un tres long fichier avec coldfusion
    Par dehian dans le forum Coldfusion
    Réponses: 0
    Dernier message: 07/12/2007, 17h43
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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