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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut Recherche de ligne dans un fichier texte

    Bonjour à tous,

    Novice en Lua et en programmation en général, j'espère être le plus clair possible pour les initiés.
    Voilà mon problème, je cherche à lire dans un fichier texte de quelques 2000 lignes une certaine ligne (std_cour_aas=1). Une fois que j'ai cette ligne je devrais mettre en place un certains nombre d'action, mon probleme c'est que bien que cette ligne existe dans mon fichier, le programme n'entre jamais dans ma boucle de condition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    monfichier = io.input("home/bis/appli/fichier.txt")
    for line in io.lines(monfichier) do 
    print(line)
    if line ==  "std_cour_aas=1" do
       print("Youplaboom")
    end
    end
    J'ai essayé de rajouté un espace après le 1, de remplacé les "std_cour_aas=1" par 'std_cour_aas=1' j'ai meme remplacé std_cour_aas=1 par une autre ligne existante dans le fichier mais rien n'y fais.
    Quelqu'un aurait il une idée de ce que je fais de travers? Cela ne m'a pas l'air bien compliqué mais impossible de trouver pourquoi ça ne rentre pas dans la boucle de condition.
    Par avance merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 342
    Points : 12 109
    Points
    12 109
    Billets dans le blog
    7

    Par défaut

    Bonjour !

    Sauf erreur de ma part, le code que vous avez posté n'est pas correct, donc je suppose que ce n'est pas vraiment le code que vous utilisez mais que vous l'avez réécrit de mémoire.

    Bref, voici un code corrigé, et qui donne le résultat attendu (la ligne est bien détectée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for line in io.lines("test.lua") do 
      print(line)
      if line == "  print(line)" then
        print("Youplaboom")
      end
    end
    Donc je ne vois pas trop pourquoi ça ne fonctionne pas chez vous. N'y aurait-il pas, comme dans l'exemple ci-dessus, un ou des espaces au début ou à la fin de la ligne ? Auquel cas la modification suivante pourrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if string.match(line, "print%(line%)") then
    Ou plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if string.match(line, "std_cour_aas=1") then

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut

    Bonjour et merci pour cette réponse.

    Ce code fonctionne, car il me retourne bien Youplaboom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for line in io.lines("test.lua") do 
      print(line)
      if line == "std_cour_aas=1" then
        print("Youplaboom")
      end
    end
    En revanche if string.match(line, "std_cour_aas=1") then me renvoie une erreur.

    J'essaie aussi la fonction string.find(line,"std_cour_aas=1") qui fonctionne presque, mais elle me renvoie deux fois le même nombre séparé par une barre, 3|3, est ce une erreur que vous connaissez?

    Pourriez-vous me dire avec quoi vous compilez et debuggez en Lua ? Pour ma part j'utilise un banc de test, et je n'y ai malheureusement pas accès aussi souvent que je voudrais pour faire avancer mon programme. Cela explique la grande latence entre votre réponses et la mienne.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 342
    Points : 12 109
    Points
    12 109
    Billets dans le blog
    7

    Par défaut

    Citation Envoyé par elpolloloco Voir le message
    Bonjour et merci pour cette réponse.

    Ce code fonctionne, car il me retourne bien Youplaboom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for line in io.lines("test.lua") do 
      print(line)
      if line == "std_cour_aas=1" then
        print("Youplaboom")
      end
    end
    Pas de quoi. Mais si ce code fonctionne, inutile d'utiliser les fonctions string.match ou string.find, non ?

    Citation Envoyé par elpolloloco Voir le message
    Pourriez vous me dire avec quoi vous compiler et debugger en lua? Pour ma part j'utilise un banc de test, et je n'y ai malheureusement pas acces aussi souvent que je voudrais pour avancer mon programme. Cela explique la grande latence entre votre réponse et la mienne.
    Un script Lua ne se compile pas, il est exécuté par l'interpréteur. Personnellement j'édite mes scripts avec Notepad++ et les exécute au moyen d'un fichier de commande (que j'appelle par exemple lua53.cmd) sur lequel je les fais glisser. Voici ce qu'il y a dans ce fichier :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
     
    C:\Lua\5.3\lua.exe %1
     
    pause

    Lua ne nécessite aucune installation. Il n'y a qu'à mettre lua.exe (et les fichiers qui vont avec) quelque part, et à l'exécuter en lui passant le nom du script.

    Pour le débogage, je ne sais pas.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut

    En fait c'est un peu plus compliqué que ça... dans mon fichier texte à un moment j'ai cette ligne "name_aas_0=patachon", "std1_aas_0=c:\home\adressecomplete\nomdustandard1", "std2_aas=c:\home\adressecomplete\nomdustandard3", "std3_aas=c:\home\adressecomplete\nomdustandard3", plus loin dans le fichier j'ai une ligne qui me dit "std_cours_aas_0 = 3" qui signifie que le standard actif est le 3.
    Mon but est de remplir un tableau avec [Patachon,c:\home\adressecomplete\nomdustandard3].
    Je pensais donc faire un string.find(line,"name_aas_"), il m'aurait renvoyé deux indices 1 et 10, prendre le 11eme caractere de la ligne ainsi que du 13ème jusqu'à la fin de la ligne.

    Je ne sais pas si je suis très clair dans mon explication?

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 342
    Points : 12 109
    Points
    12 109
    Billets dans le blog
    7

    Par défaut

    Citation Envoyé par elpolloloco Voir le message
    Je ne sais pas si je suis très clair dans mon explication?
    Je vois vaguement ce que vous voulez faire, mais pas assez précisément pour pouvoir vous aider. Est-ce que vous pourriez fournir le fichier texte en question ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut

    C'est dans le cadre professionnel et je ne suis pas sûr d'avoir le droit de mettre en ligne ce genre de fichier malheureusement pour moi.
    En tout cas je vous remercie d'avoir pris le temps de me répondre.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut

    Pourrais-je vous envoyer le fichier en message privé ?

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 342
    Points : 12 109
    Points
    12 109
    Billets dans le blog
    7

    Par défaut

    Citation Envoyé par elpolloloco Voir le message
    Pourrais-je vous envoyer le fichier en message privé ?
    Pas de problème.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut

    je n'arrive pas à l'envoyé en mp. Je l'ai zippé car il était trop gros sinon.
    Fichiers attachés Fichiers attachés

  11. #11
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 342
    Points : 12 109
    Points
    12 109
    Billets dans le blog
    7

    Par défaut

    Alors voici un exemple. On utilise la fonction string.find avec comme argument le caractère '=' pour séparer les "clés" de leur valeur. On remplit une table contenant ces clés et ces valeurs. Ensuite on accède aux valeurs dont on a besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    local t = {}
     
    for line in io.lines("Check_B.txt") do 
      local i = string.find(line, '=')
      if i ~= nil then
        local key = string.sub(line, 1, i - 1)
        local value = string.sub(line, i + 1)
        t[key] = value
      end
    end
     
    print(t['name_aas_0'])
    print(t['std_cour_aas_0'])
    Est-ce que c'est quelque chose comme ça que vous voulez faire ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : août 2011
    Messages : 13
    Points : 5
    Points
    5

    Par défaut

    Bonjour,

    Désolé pour le retard. Je tiens à vous remercier pour votre aide, cela fonctionne très bien! JE vais pouvoir continuer mon code. Encore un grand merci!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/11/2014, 17h49
  2. Recherche d'une ligne dans un fichier texte
    Par ChristineGuerre dans le forum IO
    Réponses: 1
    Dernier message: 06/08/2014, 10h34
  3. Réponses: 2
    Dernier message: 02/03/2004, 20h38
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 15h13

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