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 :

Recuperer des données d'un fichier .txt le retravailler pour le mettre dans un autre fichier .txt


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut Recuperer des données d'un fichier .txt le retravailler pour le mettre dans un autre fichier .txt
    Bonjour à tous

    Je suis à la recherche d'aide pour un projet que je dois effectuer.

    Je vous explique mon problème j'ai un fichier .txt
    sous cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    20120713|80|A|PROXIMA CENTURI|EF|5499|44532835400011|5829C|||TPE||Services|
    20120713|80|B|9 RUE DUPERRE||75009|PARIS|FR|0175432840|0175432849|contact@proximaevents.com|www.proximaevents.com|02|01/03/2010|500|2011|
    20120713|80|C|01|0204 0205||Médias et Technique pour l'évènement, production audiovisuelle. Médias : infographie, impression, vidéo, sound design. Technique : gestion technique (matériel et personnel), vote électronique. Production audiovisuelle : films, animations 3D|1|CCI Paris, CCI Moselle|1|Santé : Merck Serono / Agro-alimentaire : Danone / Commerce et Grande distribution : Carrefour / Banque et Assurance : Groupama / Formation : Acadomia / Média : Canal+ / Automobile : Peugeot / Remise de Prix : Oscars de l'Innovation / …||||||||
    20120713|80|D|CHABENI|FARID|Monsieur|2986|Directeur Associé|0175432841|0660566130|f.chabeni@proximaevents.com||
    20120713|80|D||||||||||
    20120713|80|D||||||||||
    (développement XSLT)

    et je voudrais parvenir a prendre toute les donnée de la ligne A et le mettre dans un autre fichier texte A.txt

    et ainsi de suite pour les autres lignes B.txt , C.txt et D.txt

    Je vous remercie d'avance pour votre aide.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Si ton fichier est du CSV, je te conseille la fonction fgetcsv (http://fr.php.net/manual/fr/function.fgetcsv.php)

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (($data = fgetcsv($handle, 255, '|')) !== FALSE) {
    //Mon traitement
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Vlad Tepesch merci pour ta réponse

    je vais regarder ton lien de plus près

  4. #4
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    j'ai utilisé cela pour 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <?php
    $filename="Alize.txt";
     
    if (file_exists($filename)) 
    {
        $row = 1;
    	if (($handle = fopen($filename, "r")) !== FALSE) 
    	{
    		while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) 
    		{
    			$num = count($data);
    			$row++;
    			for ($c=0; $c < $num; $c++) 
    			{
    			   $data[$c];
    			   $variables = $data[$c] ; 
    				$file = fopen("A.txt", "w"); // ouvre le fichier en écriture
    				fwrite($file, $variables); 
    				fclose($file); // ferme le fichier
    			}
     
    		}
     
    		fclose($handle);
    	}
    } 
    else 
    {
        echo "Le fichier $filename n'existe pas.";
    }
     
     
    ?>
    Mais je n'arrive pas à récupérer mes données dans mon fichier A.txt

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le problème c'est que tu ouvres ton fichier en écriture simple. Donc à chaque tour de boucle, ça va écraser le contenu du fichier inséré au tour précédent.

    Il faut donc que tu ouvres ton fichier en mode append "a"
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Merci Celira pour ta réponse ça m'a permis d'afficher mon résultat

    je l'ai fais de deux façon différentes

    quelle serait le meilleur code pour mon cas ? (j'y connais pas trop en php pour ce qui concerne les fichiers

    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
    $filename="Alize.txt";
     
    if (file_exists($filename)) 
    {
     
    	$content = file_get_contents($filename);
    	$lines = preg_split('#(\r?\n)#', $content);
    	foreach($lines as $row => $line)
    	{
    		echo $line;
    		$file = fopen("A.txt", "a"); // ouvre le fichier en écriture
    		fwrite($file, $line); 
    		fclose($file); // ferme le fichier
    	}
    }
    else 
    {
        echo "Le fichier $filename n'existe pas.";
    }
    ?>
    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
    31
    <?php
    $filename="Alize.txt";
     
    if (file_exists($filename)) 
    {
        $row = 1;
    	if (($handle = fopen($filename, "r")) !== FALSE) 
    	{
    		while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) 
    		{
    			$num = count($data);
    			$row++;
    			for ($c=0; $c < $num; $c++) 
    			{
    			   $data[$c];
    			   $variables = $data[$c] ; 
    				$file = fopen("A.txt", "a"); // ouvre le fichier en écriture
    				fwrite($file, $variables); 
    				fclose($file); // ferme le fichier
    			}
     
    		}
     
    		fclose($handle);
    	}
    } 
    else 
    {
        echo "Le fichier $filename n'existe pas.";
    }
    ?>
    maintenant il faudrait que j'arrive à dire ma prèmiere ligne doit être dans le fichier A.txt la deuxième ligne dans le fichier B.txt etc... comment je peux faire cela?

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour recopier les lignes sans traitement, j'aurais tendance à préférer la première solution.
    Maintenant, si l'information pour déterminer dans quel fichier tu dois écrire est dans la ligne, p'tet que la 1ere serait mieux...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    je viens de realiser un autre code qu'on ma gentiment aider à concevoir

    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
    $filename = $_POST['fichier'];
     
     
    if (file_exists($filename)) 
    {
    $content = file_get_contents($filename);
    $lines = preg_split('#(\r?\n)#', $content);
    $letter = 'A'; 
    foreach($lines as $line)
    {
     $file = file_put_contents($letter++ . '.txt', $line);
    }
    echo "<p class='ok'>L'injection des tiers a bien été effectuée.</p>";
    }
    else 
    {
    echo "<p class='er'>Le fichier $filename n'existe pas.</p>";
    }
    ?>
    il me génére bien à chaque ligne un fichier texte differents le type de ligne

    mais le probleme c'est que le 3 dernières lignes sont du même type D comment le regrouper en un fichier D.txt?

  9. #9
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    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
    $filename="Alize.txt";
    $old_letter=null;
    $fileOut=null;
    if (file_exists($filename)) 
    {
    	if (($handle = fopen($filename, "r")) !== FALSE) 
    	{
    		while (($ligne = fgets($handle, 1000)) !== FALSE) 
    		{
    			$data=explode("|",$ligne);
    			$new_letter=$data[2]; //la lettre est le 3eme champ séparé par "|";
    			if($new_letter!=$old_letter)
    			{
    				if($fileOut!=null)
    				{
    					fclose($fileOut);
    				}
    				$fileOut = fopen($new_letter.".txt", "a");
    				$old_letter=$new_letter;
    			}
    			fwrite($fileOut,$ligne);
    		}
    		if($fileOut!=null)
    		{
    			fclose($fileOut);
    		}
    	}
    }
    ?>
    cela crée les fichiers A.txt B.txt C.txt D.txt contenant respectivement les ligne(s) A B C D
    même si les lignes A/B/C/D ne sont pas dans l'ordre
    si tu traite un second fichier (ou le même une seconde fois) les nouvelles lignes sont ajoutée au fichier
    seule contrainte la lettre en 3eme position.
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  10. #10
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    wouaaahhh merci patrickbaras c'est exactement ce que je recherché pour le découpage de fichier

    Serait-il possible que tu commente ton code si c'est pas trop te demandé bien-sur pour que je puisse comprendre bien chaque ligne

    Encore merci

  11. #11
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    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
    31
    32
    33
    34
    35
    36
    37
    <?php
    echo "<xmp>";/* ligne a commenter ou effacer */
    $filename="Alize.txt";
    $old_letter=null;//on initialise une variable qui va contenir la valeur de la lettre précédente
    $fileOut=null; //on initialise le canal d'ecriture a null
    if (file_exists($filename)) //on verifie si le fichier existe
    {
    	if (($handle = fopen($filename, "r")) !== FALSE) //on ouvre le fichier en lecture
    	{
    		while (($ligne = fgets($handle, 1000)) !== FALSE) //pour chaque ligne 
    		{
    echo "----------------------------\n";/* ligne a commenter ou effacer */
    echo "\$ligne\n";var_dump($ligne);/* ligne a commenter ou effacer */
    			$data=explode("|",$ligne); //on decoupe la ligne avec les | et on rangent les valeurs de chaque dans le tableau $data[0]  $data[1]  $data[3] .... $data[X]
    echo "\$data\n";var_dump($data);/* ligne a commenter ou effacer */
    			$new_letter=$data[2]; //la lettre est le 3eme champ séparé par "|"; //on prend la 3eme colonne $data[2] puisque le tableau commence a $datat[0]
    echo "\$new_letter\n";var_dump($new_letter);/* ligne a commenter ou effacer */
    echo "\$old_letter\n";var_dump($old_letter);/* ligne a commenter ou effacer */
    			if($new_letter!=$old_letter) //si la lettre de la ligne est différente de l'ancienne valeur 
    			{
    				if($fileOut!=null) //si $fileout est diffrrent de null c'est que l'on a déjà ouvert un fichier
    				{
    					fclose($fileOut); //donc on ferme le fichier précédent
    				}
    				$fileOut = fopen($new_letter.".txt", "a"); //on ouvre le fichier avec comme nom la_lettre.txt
    				$old_letter=$new_letter; //l'ancienne valeur devient la nouvelle lettre
    			}
    			fwrite($fileOut,$ligne);// on ecrit dans le fichier de sortie la ligne 
    		} // on boucle sur les lignes
    		if($fileOut!=null) // on vérifie que le dernier fichier n'est pas ouvert
    		{
    			fclose($fileOut); //si est ouvert on le ferme (c'est plus propre)
    		}
    	}
    }
    echo "</xmp>";/* ligne a commenter ou effacer */
    ?>
    j'ai ajouté commentaire et des lignes pour afficher les valeurs
    évidement toute les lignes marquées /* ligne a commenter ou effacer */
    sont à commenter ou éffacer
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  12. #12
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    je te remercie mille fois

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/02/2014, 11h14
  2. Réponses: 2
    Dernier message: 23/11/2012, 16h20
  3. Réponses: 6
    Dernier message: 29/02/2012, 08h00
  4. Réponses: 2
    Dernier message: 04/09/2010, 17h30
  5. Réponses: 8
    Dernier message: 28/04/2008, 13h28

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