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 :

Parcourir un fichier text si une donnée n'existe pas écrire avec fwrite sinon effacer et réécrire la nouvelle


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut Parcourir un fichier text si une donnée n'existe pas écrire avec fwrite sinon effacer et réécrire la nouvelle
    Bonjour,
    Je souhaite ecrire dans un fichier text toutes les Id de mes sms ainsi que leurs statut sent , delivered ...
    Pour cela j'utilise un fiochier callback.php avec les instruction suivante
    :
    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
     
    <?php
    /* Ouvre le fichier text*/
    $handle = fopen("/../../www/sms/status_msg.txt", "w+");
    // Lit le document  dans un tableau
    $lines = file("/../../www/sms/status_msg.txt");
     
    // initialise la variable nouvelle ligne a vrai 
    $new = "True";
     
     //Pour chaque ligne 
    foreach ($lines as $line_msg => $lines){
        /**/
        explode($line_msg, "|");
        // Si la colonne 1 cad  Message Id = $_Get['MsgId']
        if(ch(1) = $_GET['MsgId']){
    // ce que je vherche a faire c'est effacer cette ligne et reecrire la ligne avec l'Id et le nouveau statut 
            $line_msg = "|  ".$_GET['MsgId'];
        $fichier .'=' .$line_msg;
        fwrite ($handle,$line_msg.'  |  '.$_GET['status'].'    |'."\n");}
        else{
            $new ="false";
        }
        /*Si la ligne n'existe pas */
       if ($new = "false"){
    /* Ecrit l'Id du message ainsi que sont statut*/
    fwrite($handle,"| ". $_GET['MsgId'].'  |  '.$_GET['status'].'    |'."\n");
       }
     
        }
    fclose($handle);
    ?>
    Mon fichier text se presente ainsi :
    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
     
    |    Messages ID       | Statuts |
    |______________________|_________|
    | 1392359200122530940  |  404    |
    | 1392358903711531520  |  404    |
    | 1392358584367507140  |  404    |
    | 1392359200122530940  |  404    |
    | 1392358903711531520  |  404    |
    | 1392359638273784770  |  403    |
    | 1392359638273784770  |  404    |
    | 1392358584367507140  |  404    |
    | 1392359200122530940  |  404    |
    | 1392358903711531520  |  404    |
    | 1392359638273784770  |  404    |
    | 1392360102238696990  |  403    |
    | 1392360102238696990  |  404    |
    | 1392358584367507140  |  404    |
    | 1392359200122530940  |  404    |
    | 1392358903711531520  |  404    |
    | 1392359638273784770  |  404    |
    | 1392360102238696990  |  404    |
    | 1392358584367507140  |  404    |
    | 1392359200122530940  |  404    |
    | 1392358903711531520  |  404    |
    | 1392359638273784770  |  404    |
    | 1392360102238696990  |  404    |
    | 1392358584367507140  |  404    |
    | 1392359200122530940  |  404    |
    | 1392358903711531520  |  404    |
    Le probleme c'est que je n'arrive pas a effacer la ligne pour reecrire la nouvelle

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    == et pas =
    Tu peux aussi utiliser des booleen TRUE/FALSE c'est plus sérieux

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Merci pour le conseille , sinon tu pense que mon script est cohérent ?

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Petite modification du script , besoin d'aide pour effacer une ligne
    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
    <?php
    /* Ouvre le fichier text*/
    $handle = fopen("/......./www/sms/status_msg.txt", "w+");
    // Lit le document  dans un tableau
    $lines = file("/../.../www/sms/status_msg.txt");
     
    // initialise la variable nouvelle ligne a vrai 
    $new = True;
     
     //Pour chaque ligne 
    foreach ($lines as $line_msg => $lines){
     
        /*Enleve le caractere |*/
        $ch=explode($lines, "|");
     
        // si la premiere colonne = $_Get['MsgId']
        if(trim($ch)[1] = $_GET['MsgId']){
     
    //recupere toutes le lignes 
        $fichier .= $lines;
     
    // ici je veux effacer la lignes qui contient  $_Get['MsgId'] quelqu'un pourrait m'aider  puis réecrire la nouvelle ligne ?
    ..................................................................................
    // ecrire la nouvelle ligne
      fwrite($handle,"| ". $_GET['MsgId'].'  |  '.$_GET['status'].'    |'."\n");
     
       $new ==false;}
     
    //ici si la ligne n'existe pas 
        else{
     
    // recupere toute les lignes 
          $fichier.= $lines;
     
    //ajoute la nouvelle ligne
         fwrite($handle,"| ". $_GET['MsgId'].'  |  '.$_GET['status'].'    |'."\n");
     
        }
     
     
     
        }
    fclose($handle);
    ?>

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Toujours le même problème, dans tes comparaisons tu as mis = au lieu de ==
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(trim($ch[1]) == $_GET['MsgId']){
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fwrite($handle,"| ". $_GET['MsgId'].'  |  '.$_GET['status'].'    |'."\n");
    Pourquoi tu mets des espaces partout autour des | ?

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Les espaces me permet d'avoir un fichier text sous forme de tableau clair et pas des valeurs coller les unes aux autres
    Merci pour la remarque if( trim ch[1]== .....) car c'etait un oublie de frappe.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise une tabulation alors, ca sera plus efficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite($handle,"\t". $_GET['MsgId']."\t".$_GET['status']."\t\n");

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Pour effacer la ligne qui contient $_Get['MsgID'] dois-je faire un unset ? Ou il exsite une autre methode ?

    Quand je fais le :
    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
     
    // si la premiere colonne = $_Get['MsgId']
        if(trim($ch)[1] == $_GET['MsgId']){
    // je recupere toutes les lignes 
        $fichier .= $lines;
    //je veux effacer la ligne qui contient $_Get['MsgID'] doit-je utiliser un unset ? 
     
       $new ==false;}
     
    //si $_Get['MsgId'] n'existe pas 
        else{
    //je recupere toutes les lignes 
          $fichier.= $lines;
    //j'ecris la nouvelle lignes
         fwrite($handle,"| ". $_GET['MsgId'].'  |  '.$_GET['status'].'    |'."\n");
     
        }

  9. #9
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    On ne peut pas "effacer" une ligne.
    La méthode que tu utilises est bonne : ne pas écrire les lignes dont tu ne veux pas.

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Du coup 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
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    // Lit le document  dans un tableau
    $lines = file($_SERVER['DOCUMENT_ROOT']."/sms/status_msg.txt");
     
      //Pour chaque ligne 
    foreach ($lines as $key => $val){
        /*Enleve le caractere |*/
        $ch=explode("|",$val );
     
            // si la premiere colonne = $_Get['MsgId']
        if(trim($ch['0']) == $_GET['MsgId']){     
    		$val =$_GET['MsgId'].' | '.$_GET['status'].' |'."\n";
     
    	}  
     
            //nouveau fichier avec concatenation de toute les lignes
    	$fic .= $val;        
    }
    var_dump($fic);
    echo $val;
     
    /*w+ :Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier 
     * et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.*/
    $handle = fopen($_SERVER['DOCUMENT_ROOT']."/sms/status_msg.txt", "w+");
     
    //Ecriture du Fichier
    fwrite($handle,$fic);
    fclose($handle);
    ?>
    J4ai pas l'impression qu'il remonte correctement les infos :

    Voici le resultat :
    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
     1392800932108168770 | 404 |
     |  |
    805127791475020   403
     |  |
     |  |
    805127791475020   404
     |  |
    1392804936106032130   404
    1392724112528864630,1392724307448526520,1392724670775623620,1392724984557964990,1392725075552161120   404,404,404,404,404
    1392725570138859500,1392725467100270890,1392725166552492530   404,404,404
    1392719114710559170   404
    1392715652694518430   404
    1392800680100901380,1392800810700810800,1392800932108168770,1392801145284899250,1392801267185496340   404,404,404,404,404
    1392803977912028450,1392802719108807680,1392802644874039480,1392802261307131140,1392802163286558020   404,404,404,404,405
    1392802006418367480,1392801950585361180,1392801759645868470,1392801395725892060   404,405,404,404
    1392796813973719060,1392796678230780790   404,404
    1392789147576718710,1392789113556412270,1392788634795282100,1392788473800353050,1392788304725291360   404,404,404,404,404
    1392788009496771610,1392787778104115660,1392786300600670590,1392724881534228150,1392725790852878010   404,404,404,404,404
    1392796598454757200   404
    Qui est pas du tout comme je l'aurais souhaité c'est a dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1392800932108168770 | 404 |
    1392800932108168780 | 404 |
    1392800932108168790 | 404 |
    Je n'arrive pas a comprendre pk ? j'ai tenté un var_dump($_Get['MsgId'] qui me renvoie null

  11. #11
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $val =$_GET['MsgId'].' | '.$_GET['status'].' |'."\n";
    Ce n'est pas la ligne que je t'ai corrigé ça.

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    JE ne pense pâs que se soit lié a cela car tanto sa fonction tanto non

  13. #13
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme tu veux.

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

Discussions similaires

  1. Créer un fichier texte si celui spécifié n'existe pas
    Par Roud9 dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 25/03/2011, 10h31
  2. Réponses: 4
    Dernier message: 11/09/2006, 14h47
  3. Réponses: 21
    Dernier message: 05/06/2006, 11h49
  4. Comment parcourir un fichier texte avec une boucle ?
    Par kikica dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2005, 18h13
  5. Réponses: 2
    Dernier message: 26/05/2004, 18h53

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