Partage
  • Partager sur Facebook
  • Partager sur Twitter

[RUBY] Récupérer contenu fichier dans variable

Sujet résolu
    3 août 2021 à 22:39:57

    Yo !

    J'aimerai récupérer le contenu d'un fichier (la première ligne exactement) et l'enregistrer dans une variable.

    A la base je voulais faire un truc comme ça:

    # ouverture du fichier (en lecture seule)
    fichier_jetons = File.open("./jetons", "r")
    # on met le dans une variable
    jetons = fichier_jetons
    # fermeture du fichier 
    fichier_jetons.close

    Or ça me la variable me renvoie: #<File:0x0000558991893f80>
    J'ai donc essayé un conversion à la sauce .to_i
    Mais ça ne fonctionne pas.

    Après plusieurs essais je me suis décidé à faire ainsi:

    # ouverture du fichier (en lecture seule)
    fichier_jetons = File.open("./jetons", "r")
    # on met le fichier dans un tableau
    tab_jetons = fichier_jetons
    # on sépare à l'espace
    tab_jetons = tab_jetons.read.split("\n")
    # on met dans une variable l'index 0 du tableau convertit en nombre
    jetons = tab_jetons[0].to_i
    # fermeture du fichier 
    fichier_jetons.close

    Ça fonctionne, mais y a mieux non?
    Une idée?

    Merci d'avance de votre attention.

    • Partager sur Facebook
    • Partager sur Twitter
      4 août 2021 à 12:55:27

      tu peux te passer de la ligne 4 pour utiliser fichier_jetons (qui correspond à l'objet FILE)

      tu pourrais lire une ligne avec gets

      # ouverture du fichier (en lecture seule)
      fichier_jetons = File.open("./jetons", "r")
      #lire une ligne
      ligne=fichier_jetons.gets #.chomp si on veux supprimer directment le '\n'
      jetons=ligne.to_i
      #on peut écrire en ligne, je pense: jetons=File.new("./jetons").gets.chomp.to_i
      # fermeture du fichier
      fichier_jetons.close

      ou encore avec readline

      # ouverture du fichier (en lecture seule)
      fichier_jetons = File.open("./jetons", "r")
      #lire les lignes
      ligne=fichier_jetons.readline
      jetons=ligne.to_i
      #on peut écrire en ligne, je pense: jetons=File.new("./jetons").readline.to_i
      # fermeture du fichier
      fichier_jetons.close
      



      • Partager sur Facebook
      • Partager sur Twitter
        4 août 2021 à 15:33:38

        Salut,

        Tu peux aussi utiliser File.readlines(file_name).first. Si tu veux quand même ouvrir le fichier et ensuite lire dedans, utiliser plutôt open avec un bloc, comme ça, le fichier est automatiquement fermé à la fin du bloc (à noter que le mode lecture est le mode par défaut, donc pas besoin d'indiquer le mode). Donc je te conseille une des deux solutions suivantes (les deux lignes sont totalement équivalentes (l'éditeur Markdown d'OC a des bugs, le &amp; de la deuxième solution est un &).

        first_line = File.open(file_name) { |f| f.readline }
        # Ou encore 
        first_line = File.open(file_name, &amp;:readline)
        

        -
        Edité par yo@n97one 4 août 2021 à 15:34:51

        • Partager sur Facebook
        • Partager sur Twitter
        Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
          4 août 2021 à 18:32:39

          yo@n97one: il faut passer par le bouton </> pour insérer du code en principe, ça devrait passer correctement
          • Partager sur Facebook
          • Partager sur Twitter
            4 août 2021 à 21:15:41

            @umfred : ça, c'est avec l'éditeur à boutons, et je ne l'aime pas. Je préfère passer par le Markdown, mais l'éditeur est bugué depuis plusieurs années... Y a moyen d'obtenir quand même la coloration en passant par du HTML, mais j'ai considéré que ça ne valait pas le coup pour deux lignes de code. :)

            • Partager sur Facebook
            • Partager sur Twitter
            Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
              4 août 2021 à 22:49:27

              Merci à vous deux @yo@n97one et @umfred.

              Je mets ces astuces de côté, je les réutiliserai sûrement prochainement.

              Du coup j'ai opté pour ça:

              fichier_jetons = File.readlines("./jetons").first
              $jetons = fichier_jetons.to_i

               Nous sommes d'accord que comme je n'utilise pas de open, je n'ai pas à fermer le fichier?

              -
              Edité par Getrox 4 août 2021 à 22:57:02

              • Partager sur Facebook
              • Partager sur Twitter

              [RUBY] Récupérer contenu fichier dans variable

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown