Partage
  • Partager sur Facebook
  • Partager sur Twitter

modifier un fichier

Anonyme
    19 juin 2020 à 17:10:52

    Bonjour, 

    je viens de commencer les scripts shell et je viens d'en faire un qui permet de faire une liste de course à faire ( ou une simple liste ) le problème est que cela doit être dans un fichier csv et non pas txt, cela fait que des virgules sont affichés. 

    Comment peut on faire pour enlever les virgules lors de l'affichage. Avec quelques recherches j'ai essayé de faire intervenir IFS c'est à dire IFS=',' au début mais ça ne fonctionne toujours pas 

    -
    Edité par Anonyme 19 juin 2020 à 17:11:48

    • Partager sur Facebook
    • Partager sur Twitter
      19 juin 2020 à 17:40:18

      Sans voir le script (et sans connaître le langage utilisé), je ne saurais te dire pourquoi ce que tu fais avec $IFS ne fonctionne pas.

      Exemple d'utilisation en bash :

      IFS=";"; while read line; do echo $line; done < fichier


      Sinon, tu peux éditer le flux avec sed :

      sed 's/;/ /g' fichier

      Ou en utilisant une astuce de GNU awk décrite dans sa doc:

      awk 'BEGIN { FS = ";"; OFS = " " } $1 = $1' fichier

      -
      Edité par KoaTao 20 juin 2020 à 0:12:06

      • Partager sur Facebook
      • Partager sur Twitter
        19 juin 2020 à 20:40:02

        Exemple d'utilisation en bash :

        IFS=";" | while read line; do echo $line; done < fichier

        t'es sûr de la syntaxe ?

        vraiment ? :)

        -
        Edité par dantonq 19 juin 2020 à 20:41:11

        • Partager sur Facebook
        • Partager sur Twitter

        Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          20 juin 2020 à 0:11:43

          Boouuh le vilain pipe à la place du point virgule. :-°

          On n'a rien vu :)

          -
          Edité par KoaTao 20 juin 2020 à 0:11:55

          • Partager sur Facebook
          • Partager sur Twitter
            20 juin 2020 à 4:35:48

            si tu mets un point-virgule, l'IFS sera modifié de manière globale pour tout le script.

            while IFS=',' read -ra liste
            do
                printf '%s\n' "${liste[@]}"
            done <fichier

            mais, l'algorithme et le raisonnement de YoshiSmith ne semble pas correct.

            il faudrait en savoir plus sur les intentions de YoshiSmith, pour lui éviter d'entrer dans des complications qui en appelleront d'autres,
            et finalement d'écrire un script de plusieurs centaines de lignes inutiles, qui devra gérer des exceptions générées par un algorithme foireux (en gros : faire du KK).

            quel intérêt de faire un CSV pour un liste de courses ?

            -
            Edité par dantonq 21 juin 2020 à 16:15:16

            • Partager sur Facebook
            • Partager sur Twitter

            Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

              21 juin 2020 à 9:22:35

              dantonq a écrit:

              printf '%s\n' "${liste[@]}"

              dantonq a écrit:

              t'es sûr de la syntaxe ?

              vraiment ? :)

              :D

              D'ailleurs, j'ai utilisé un point virgule comme séparateur alors que l'OP parle bien sûr de virgule (donc faudra faire attention à ça lors de la recopie des diverses commandes ^^ ).

              -
              Edité par KoaTao 21 juin 2020 à 9:26:43

              • Partager sur Facebook
              • Partager sur Twitter
                21 juin 2020 à 16:14:52

                et moi, je reproduis l'erreur, bêtement.

                je corrige.

                 quant à

                printf '%s\n' "${liste[@]}"

                oui, oui, je suis sûr de la syntaxe.
                qu'est-ce qui te choque ?

                -
                Edité par dantonq 21 juin 2020 à 16:36:06

                • Partager sur Facebook
                • Partager sur Twitter

                Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                  21 juin 2020 à 19:04:27

                  Ce qui me choque est l'expansion de l'array "${liste[@]}" en "champ1" "champ2" "champ3", et donc le printf affichera un champ par ligne (pour être sûr j'ai testé).

                  Je le remplacerai donc plutôt par "${liste[*]}".

                  Bash et sa syntaxe, un piège à chaque ligne ^^ (d'ailleurs l'OP utilise peut-être un autre shell).

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 juin 2020 à 19:16:44

                    c'est ce que je voulais : un élément par ligne.
                    comme une liste de courses.

                    qui fait une liste de courses sur une ligne ?*

                    si on veut une ligne, alors remplaçons le printf par un echo :

                    while IFS=',' read -ra liste
                    do
                        echo "${liste[@]}"
                    done <fichier

                     --
                    * sans séparateur "remarquable"

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    modifier un fichier

                    × 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