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 :

Mettre le contenu d'un array dans un fichier [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Mettre le contenu d'un array dans un fichier
    Bonjour,

    J'ai un fichier, testData1.txt, qui contient :
    "e_mail","categorie_user","statut","name","firstname","company","date"
    "toto@toto.fr","public","actif","toto","totonet","","20140302"
    "tata@tata.fr","prive","actif","tata","nono","tatanono.com","20130102"
    etc...

    Je fais la vérification du format d'email et si cela n'est pas bon, je supprime l'enregistrement (ligne).
    Ensuite, je crée un fichier, par exemple, tata2014_03_05__14_19_38__000000.txt et dedans je vais mettre le contenu de mon 1er fichier sans les enregistrements supprimé, à cause de mauvais email, s'il y en a.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    $fichierTraiter = '../data/testData1.txt';
     
     
     
    $tableFichierData = array();
     
    if (($handle = fopen($fichierTraiter, "r")) !== FALSE) //Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
    {
        // la 1ere ligne contient l'entête, donc on l'ignore
        $data = fgetcsv($handle, 1000);
        // parcours des lignes
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
        {
            $tableFichierData[] = array
            (
                'e_mail' => $data[0],
                'categorie_user' => $data[1],
                'statut' => $data[2],
                'name' => $data[3],
                'firstname' => $data[4],
                'company' => $data[5],
                'date' => $data[6]
            );
     
     
    		$e_mail = $tableFichierData[e_mail];
    		$e_mail = str_replace ( ' ' , '' , $e_mail); // vider les espace
     
    			//Si email n'est pas bon enleve cette engretistrement
    		if(!VerificationFormatEmail($e_mail))
    		 { //echo '<p>Courriel n'est pas valide.</p>';
    		  unset($tableFichierData['e_mail']);
    		  unset($tableFichierData['categorie_user']);
    		  unset($tableFichierData['statut']);
    		  unset($tableFichierData['name']);
    		  unset($tableFichierData['firstname']);
    		  unset($tableFichierData['company']);
    		  unset($tableFichierData['date']);
    		   }
     
     
    		//var_dump($tableFichierData);
            //exit();
     
     
    		// Définit le fuseau horaire par défaut à utiliser. 
    				date_default_timezone_set('America/Montreal');
     
     
     
     
    					// formatage du date avec fonction 'date'							
    						//$var_date = date('d_m_Y--H_i_s_');
    						//$var_date = date('d/m/Y');				
    				 $var_date = date('d_m_Y--H_i_s_u');
     
    //echo $var_date;
    //exit();
     
    		//$fichier_data_UTL = '../data/' . date('Y-m-d\TH:i:s:u'). '.txt';
    		$fichier_data_UTL = '../data/tata' . date('Y_m_d__H_i_s__u'). '.txt';
     
     
    //		echo $fichier_data_UTL;
    //exit();
     
     
    		//ou en mode "ajouter" à la fin d'info existant
    						//créé si inexistant
    		$ouvrir_UTL = fopen($fichier_data_UTL,"a");
     
    			//La position du pointeur est dans le file		
    		$pointeur_adresse_memoire = ftell($ouvrir_UTL);
     
    			//et est modifiable
    		$pointeur_adresse_memoire = fseek($ouvrir_UTL,$pointeur_adresse_memoire-10);
     
    		//fputs($ouvrir_UTL, $valeur.';'."\n");
    		//fputs($ouvrir_UTL, 'toto');
    		//fputs($ouvrir_UTL, $valeur);
     
     
    		foreach ($tableFichierData as $valeur) 
    		{
    			fputs($ouvrir_UTL, $valeur);
    		}
     
     
     
    				fclose($ouvrir_UTL);
     
     
    		}
    }
    Mais mon nouveau fichier ne contient rien du tout, est-ce que vous avez une idée ?

    Merci

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Hello !

    j'ai repris l'ensemble de ton script, il y avait pas mal de faute dedans. Je te laisse voir comment je l'ai corrigé et optimisé :

    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
     
    date_default_timezone_set('America/Montreal'); // On définit le timezone en dehors de la boucle
    $fichierTraiter = '../data/testData1.txt';
     
    if (($handle = fopen($fichierTraiter, "r")) !== FALSE) { //Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
        // la 1ere ligne contient l'entête, donc on l'ignore
        fgetcsv($handle, 0, ',');
        // parcours des lignes
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $tableFichierData = array(
                'e_mail' => $data[0],
                'categorie_user' => $data[1],
                'statut' => $data[2],
                'name' => $data[3],
                'firstname' => $data[4],
                'company' => $data[5],
                'date' => $data[6]
            );
     
            $e_mail = $tableFichierData['e_mail'];
            $e_mail = str_replace(' ', '', $e_mail); // vider les espace
            //Si email n'est pas bon enleve cette engretistrement
            if (VerificationFormatEmail($e_mail)) { //echo '<p>Courriel n'est pas valide.</p>';
                $fichier_data_UTL = '../data/tata' . date('Y_m_d__H_i_s__u') . '.txt';
     
                $ouvrir_UTL = fopen($fichier_data_UTL, "a+");
     
                foreach ($tableFichierData as $valeur) {
                    fputs($ouvrir_UTL, $valeur.' ');
                }
                fclose($ouvrir_UTL);
            }
        }
    }
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Merci Spartacusply,
    Super gentil,

    Ton code marche, mais le fichier change le format...

    Avec tes rectifications, on obtient :
    e_mail categorie_user statut name firstname company date toto@toto.fr public actif toto totonet 20140302 tata@tata.fr prive actif tata nono tatanono.com 20130102
    au lieu de :
    "e_mail","categorie_user","statut","name","firstname","company","date"
    "toto@toto.fr","public","actif","toto","totonet","","20140302"
    "tata@tata.fr","prive","actif","tata","nono","tatanono.com","20130102"
    En fait, c'est pour cela que j'ai voulu utiliser 2 array et mettre dans le fichier le contenu du 2e array.

    Alors comment je peux garder le format du mon fichier, testData1.txt.

    Je vais le voir pour savoir comment je peux faire, si tu as des idées, c'est bienvenu

    Merci encore

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Ah oui et bien il suffit de rajouter un retour à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach ($tableFichierData as $valeur) {
            fputs($ouvrir_UTL, $valeur.' ');
    }
    fputs("\n"); //va à la ligne
    Pour les guillemets doubles et les virgules si tu tiens à les garder, même chose il faut les rajouter dans le foreach
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Ça ne change rien dans mon cas... En plus, j'ai fait d'autres essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                foreach ($tableFichierData as $valeur) {
     
    				fputs($ouvrir_UTL, $valeur.' ');
    				//fputs($ouvrir_UTL, $valeur.';'."\n");
                    //fputs($ouvrir_UTL, $valeur.' ');
    				//fputs("\n"); //va à la ligne
                }
    			//fputs("\n"); //va à la ligne
                fclose($ouvrir_UTL);
    C'est toujours... :
    e_mail categorie_user statut name firstname company date toto@toto.fr public actif toto totonet 20140302 tata@tata.fr prive actif tata nono tatanono.com 20130102
    En plus de cela, je n'ai plus de guillemets ni les virgules :
    Je voulais comme cela :

    "e_mail","categorie_user","statut","name","firstname","company","date"
    "toto@toto.fr","public","actif","toto","totonet","","20140302"
    "tata@tata.fr","prive","actif","tata","nono","tatanono.com","20130102"

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Pardon c'est ma faute, il faut bien sur toujours spécifier "$ouvrir_UT" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ($tableFichierData as $valeur) {
            fputs($ouvrir_UTL, '"'.$valeur.'",');
    }
    fputs($ouvrir_UTL,"\n"); //va à la ligne
    J'en ai profité pour te rajouter la virgule et les guillemets
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    super,
    Un grand merci,
    ça marche, mais il y a un dernier petit détail

    Ce que j'obtiens :
    "e_mail","categorie_user","statut","name","firstname","company","date",
    "toto@toto.fr","public","actif","toto","totonet","","20140302",
    "tata@tata.fr","prive","actif","tata","nono","tatanono.com","20130102",
    Comment peux-je enlever la dernière virgule à la fin de chaque enregistrement pour avoir cela :
    "e_mail","categorie_user","statut","name","firstname","company","date"
    "toto@toto.fr","public","actif","toto","totonet","","20140302"
    "tata@tata.fr","prive","actif","tata","nono","tatanono.com","20130102"

  8. #8
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $chaine = '';
    foreach ($tableFichierData as $valeur) {
          $chaine .= '"'.$valeur.'",';
    }
    $chaine = substr($chaine, 0 ,-1); // On enleve la dernière virgule
    fputs($ouvrir_UTL, $chaine."\n"); // écrit la chaine et va va à la ligne
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Super Spartacusply,
    Ça marche comme il faut
    Un grand merci

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Merci Spartacusply
    Voici l'application / explication du code de Spartacusply dans mon cas :

    J'ai un fichier, testData1.txt, :
    "e_mail","categorie_user","statut","name","firstname","company","date"
    toto@toto.fr","public","actif","toto","totonet","","20140302"
    "tata3tata.fr","prive","actif","tata","nono","tatanono.com","20130102"
    "tata@toto.fr","public","actif","tata","totonet","","20140302"

    Je fais la vérification du format d'email et si cela n'est pas bon, je supprime l'enregistrement (ligne).
    Ensuite, je crée un fichier, par exemple, new.txt et dedans je vais mettre le contenu de mon 1er fichier, avec le même format ["ddd","ddd","ddd"] sans les enregistrements supprimé, à cause de mauvais email, s'il y en a.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    date_default_timezone_set('America/Montreal'); // On définit le timezone en dehors de la boucle
    $fichierTraiter = '../data/testData1.txt';
     
    if (($handle = fopen($fichierTraiter, "r")) !== FALSE) { //Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
        // la 1ere ligne contient l'entête, donc on l'ignore
        fgetcsv($handle, 0, ',');
        // parcours des lignes
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $tableFichierData = array(
                'e_mail' => $data[0],
                'categorie_user' => $data[1],
                'statut' => $data[2],
                'name' => $data[3],
                'first_name' => $data[4],
                'company' => $data[5],
                'date' => $data[6]
            );
     
    //		var_dump($tableFichierData);
    //        exit();
     
            $e_mail = $tableFichierData['e_mail'];
            $e_mail = str_replace(' ', '', $e_mail); // vider les espace
     
    		//Si email n'est pas bon enleve cette engretistrement
    		if(!VerificationFormatEmail($e_mail))
    		 { //echo '<p>Courriel n'est pas valide.</p>';
    		  unset($tableFichierData['e_mail']);
    		  unset($tableFichierData['categorie_user']);
    		  unset($tableFichierData['statut']);
    		  unset($tableFichierData['name']);
    		  unset($tableFichierData['first_name']);
    		  unset($tableFichierData['company']);
    		  unset($tableFichierData['date']);
    		   }
     
    //			var_dump($tableFichierData);
    //        exit();	
     
                $fichier_data_UTL = '../data/3eEssaye' . date('Y_m_d__H_i_s__u'). '.txt';
     
     
                //'a+'	 Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
    			$ouvrir_UTL = fopen($fichier_data_UTL, "a+");
     
     
    			$chaine = '';
     
     
    			if(empty($tableFichierData)) continue; // S'il y a des engregistrement sont effacer, sauter la vide
    			foreach ($tableFichierData as $valeur)
    			{
    				 $chaine .= '"'.$valeur.'",';
    				 //fputs($ouvrir_UTL, $valeur.' ');
    				//fputs($ouvrir_UTL, '"'.$valeur.'",');
                }
     
     
     
     
    			$chaine = substr($chaine, 0 ,-1); // On enleve la dernière virgule
    			fputs($ouvrir_UTL, $chaine."\n"); // écrit la chaine et va va à la ligne
    			//fputs($ouvrir_UTL,"\n"); //va à la ligne
     
    			fclose($ouvrir_UTL);
            }
        }
    Merci encore

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

Discussions similaires

  1. Mettre le contenu d'une table dans un array
    Par Neo57 dans le forum Langage
    Réponses: 3
    Dernier message: 09/04/2013, 07h41
  2. [MySQL] Mettre le contenu d'un array dans une requête
    Par chido dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/01/2012, 20h02
  3. [Débutant] mettre le contenu de ma cell dans un fichier texte
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 9
    Dernier message: 07/01/2012, 13h18
  4. mettre le contenu d'une liste dans un fichier EXCEL
    Par john_wili dans le forum Jasper
    Réponses: 1
    Dernier message: 13/01/2009, 11h22
  5. Réponses: 8
    Dernier message: 13/04/2007, 11h17

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