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

  1. #1
    Membre régulier
    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
    Points : 74
    Points
    74
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    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"
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre régulier
    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
    Points : 74
    Points
    74
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    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.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre régulier
    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
    Points : 74
    Points
    74
    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 régulier
    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
    Points : 74
    Points
    74
    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'));
     
    ?>

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Teste avec ce que je t'ai donné
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Bonsoir, après avoir testé ton code celui-ci ne supprime aucune ligne après les "TEMPO"

    Cordialement.

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Je teste ceci avec ta data et le bout de script donné plus haut :

    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
    <?php
     
    $data = <<<BUFFER
        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
        BUFFER;
     
    $fp = fopen('data://text/plain,' . urlencode($data), 'r');
     
    $contents = '';
    while (($row = fgets($fp)) !== false) {
        if (strpos($row, 'TEMPO') === false) {
            $contents .= $row;
        }
    }
     
    echo $contents;
    Et le résultat est bon, les lignes contenant "TEMPO" sont bien supprimées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    2021/05/24 18:21
    TAF LFLX 241700Z 2418/2524 24015G25KT 9999 BKN040 PROB40
        BECMG 2421/2423 23010KT
    Donc si le problème persiste de ton côté, donne-nous la dernière version de ton script.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Bonsoir, je n'ai pas été assez précis dans mon explication désolée. en faites je veux supprimer les TEMPOS qui ne m'intéresse pas, car date du jour suivant, c'est pour cela que rajoute une variable J+1 j'identifier cette variable par par $diff et ceci pour ne supprimer que les TEMPOS trop lointains
    La variable $diff contient la valeur du jour suivant



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    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  <====<======================  sup car daté du 25 nous sommes le 24
            TEMPO 2510/2518 27015G25KT 4000 -SHRA BKN030TCU <=================== idem

    Cordialement

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Ok, donne-nous le dernier script en date qu'on puisse voir ce qui bloque
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  12. #12
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Ok voici le code utilisé. Je t'envoie les liens vers les données en message privé. en espérant que tu auras des TEMPO différents

    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
     
     
     
    $file = "https://wwww.stations.txt";
    $newfile = 'file.txt';
     
    if (!copy($file, $newfile)) {
        //echo "La copie $file du fichier a échoué...\n";
    }
     
     
    $fp = fopen($newfile, 'r');
    $contents = '';
    while (($row = fgets($fp)) !== false) {
        if (strpos($row, "TEMPO $diff") === false) {
            $contents .= $row;
        }
    }
     
    file_put_contents('file.txt', $contents);
    //var_dump(file_get_contents('file.txt'));

  13. #13
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    Désolé, je ne comprends pas les règles de filtrage.

    Actuellement nous avons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2021/05/29 09:21
    TAF TAF LFML 290800Z 2909/3015 26005KT CAVOK TX28/2915Z TN17/3005Z 
          BECMG 2913/2915 32015KT 
          TEMPO 2915/2918 26015KT 
          TEMPO 2919/2923 30005KT 
          BECMG 2923/3001 VRB03KT 
          BECMG 3010/3012 18012KT
    Que veux-tu conserver et pourquoi ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  14. #14
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Pas de problème

    TEMPO 2915/2918 26015KT
    TEMPO 2919/2923 30005KT
    BECMG 2923/3001 VRB03KT
    BECMG 3010/3012 18012KT

    ic tout est bon car les TEMPO sont du jour ici le 29 =====>2915/2918 mais si il était du 30 les informations suivant le Tempo seraient pour le lendemain
    moi je cherche uniquement les informations du jour


    par exemple TEMPO 2917/2920 VRB18G28KT 2000 TSRA il y a un risque d'orage entre 17H et 20H ce jour le 29 . TEMPO JJH/JJH --------- TSAR (orage)

  15. #15
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 091
    Points : 8 194
    Points
    8 194
    Billets dans le blog
    17
    Par défaut
    T'es pas assez précis et tu te contredis

    Pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2021/05/29 09:21
    TAF TAF LFML 290800Z 2909/3015 26005KT CAVOK TX28/2915Z TN17/3005Z 
          BECMG 2913/2915 32015KT 
          TEMPO 2915/2918 26015KT 
          TEMPO 2919/2923 30005KT 
          BECMG 2923/3001 VRB03KT 
          BECMG 3010/3012 18012KT
    Tu me donnes en résultat à conserver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TEMPO 2915/2918 26015KT
    TEMPO 2919/2923 30005KT
    BECMG 2923/3001 VRB03KT
    BECMG 3010/3012 18012KT
    La ligne 1 avec la date, tu la gardes ou pas ?
    La ligne 2 avec le "TAF TAF", tu la gardes ou pas ?
    Pourquoi le BECMG ligne 3 a sauté ?
    Les lignes suivantes, tu gardes tout sauf les TEMPO qui ne sont pas de la date du jour ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  16. #16
    Membre régulier
    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
    Points : 74
    Points
    74
    Par défaut
    Lol c 'est pas le même taf c 'est pour cela mais bon


    TEMPO 2915/2918 26015KT oui puisque du jour
    TEMPO 2919/2923 30005KT idem


    BECMG 2923/3001 VRB03KT je ferais pareille pour les BCMG que pour les tempo mais pas un problème pour l 'instant je ferais la même routine plus tard
    BECMG 3010/3012 18012KT idem

    voilou !

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