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 :

Supprimer une ligne d'un fichier txt sous condition


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Par défaut Supprimer une ligne d'un fichier txt sous condition
    Bonjour, le code suivant permet de supprimer la ligne d'un fichier txt contenant le mot TEMPO . j 'ai juste un problème pour que ce script sup bien toutes les lignes contenants TEMPO . En effet la premières ligne contenant TEMPO n'est jamais sup. Pour les autres lignes c'est ok . voila je patauge . Merci de votre aide

    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
     
    $file = "https://www.webcom.fr.data.TXT";
    $newfile = 'file.txt';
     
    if (!copy($file, $newfile)) {
        //echo "La copie $file du fichier a échoué...\n";
    }
     
     
    $file     = array_chunk(array_filter(explode("\n", str_replace(array("\n\t", "\r"), "", file_get_contents('file.txt')))), 2);
    $contents = '';
    foreach($file as $lines) {
        if(substr_count($lines[0], "TEMPO") === 0) { // <=============== PROBLEME
            $contents.= implode("\n", $lines) . "\n";
        }
    }
    file_put_contents('file.txt', $contents);
    //var_dump(file_get_contents('file.txt'));
     
     
    ?>

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    La ligne 12 me semble bien compliquée. Un simple fgets() ne te suffit pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $fp = fopen($newfile, 'r');
    $contents = '';
    while (($row = fgets($fp)) !== false) {
        if (strpos($row, 'TEMPO') === false) {
            $contents .= $row;
        }
    }
    Attention, dans ton script (et le mien), la ligne est supprimée dès que le terme TEMPO apparaît, que ce soit un mot ou non.

    Ex. si la ligne contient "CETTE OEUVRE EST INTEMPORELLE"

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Par défaut
    bonsoir Séb et merci d'avoir pris le temps de me répondre. Merci pour la simplification de la ligne 12. Par contre je ne m'explique toujours pas pourquoi le 1er TEMPO n 'est pas effacé.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Si le problème persiste avec ce que je t'ai donné, alors donne-nous ton script final et quelques lignes du fichier à parcourir.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Par défaut
    OK il Faut que je test sur plusieurs jours car le fichier change toutes les 6 heures. Merci encore

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 320
    Par défaut
    Bonsoir, après 24 heures de test le script fonctionne 98%. Car LE premier Tempo trouvé dans le fichier n'est pas supprimé. Pour tout dire je rajoute une variable qui correspond au jour que je dois supprimer, car les données sont trop lointaines. Voilà j 'espère être complet


    Voici le fichier TXT non traité par le Script

    2021/05/24 18:21
    TAF LFLX 241700Z 2418/2524 24015G25KT 9999 BKN040 PROB40 
          TEMPO 2418/2421 24020G35KT 4000 SHRA SCT025CB PROB30 
          TEMPO 2418/2421 2000 TSRA BKN020 BKN040CB 
          BECMG 2421/2423 23010KT 
          TEMPO 2502/2505 BKN010 PROB40  <=====  cette ligne n'est pas supprimée 
          TEMPO 2510/2518 27015G25KT 4000 -SHRA BKN030TCU

    Le même traité par le script

    2021/05/24 18:21
    TAF LFLX 241700Z 2418/2524 24015G25KT 9999 BKN040 PROB40 
          TEMPO 2418/2421 24020G35KT 4000 SHRA SCT025CB PROB30 
          TEMPO 2418/2421 2000 TSRA BKN020 BKN040CB 
          BECMG 2421/2423 23010KT 
          TEMPO 2502/2505 BKN010 PROB40 


    Voici la partie du Script qui traite les données

    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
     
     $jour;
     
     $diff = date ('d', strtotime($jour. ' + 1 days'));
     
     
     
     
     
     
    $file = "https://xxxxxxxxxxxxxxxxxxxxx/data/forecasts/taf/stations/$id.TXT"; 
    $newfile = 'file.txt';
     
    if (!copy($file, $newfile)) {
        //echo "La copie $file du fichier a échoué...\n";
    }
     
     
    $file     = array_chunk(array_filter(explode("\n", str_replace(array("\n\t", "\r"), "", file_get_contents('file.txt')))), 2);
    $contents = '';
    foreach($file as $lines) {
        if(substr_count($lines[0], "TEMPO $diff") === 0) { // c 'est là que je rajoute l 'heure pour ne supprimer que les lignes datées,du jour suivant
            $contents.= implode("\n", $lines) . "\n";
        }
    }
    file_put_contents('file.txt', $contents);
    //var_dump(file_get_contents('file.txt'));
     
    ?>

Discussions similaires

  1. Supprimer une ligne d'un fichier .txt
    Par beber005 dans le forum Général Java
    Réponses: 1
    Dernier message: 09/04/2013, 16h13
  2. supprimer une ligne d'un fichier .txt
    Par gonzo59 dans le forum C#
    Réponses: 8
    Dernier message: 17/03/2009, 09h29
  3. Supprimer une ligne dans un fichier .txt
    Par lince102 dans le forum MATLAB
    Réponses: 12
    Dernier message: 31/01/2008, 10h19
  4. supprimer une ligne d'un fichier txt
    Par warubi dans le forum C++
    Réponses: 5
    Dernier message: 10/01/2007, 18h57
  5. Supprimer une donnée d'un fichier txt
    Par dinastar dans le forum Langage
    Réponses: 7
    Dernier message: 31/03/2006, 15h28

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