Partage
  • Partager sur Facebook
  • Partager sur Twitter

"\r\n" d'un fichier txt ne fait pas de saut

Sujet résolu
    22 février 2018 à 10:31:31

    Bonjour à tous,

    Je récupère du texte d'un fichier .txt et je le met dans maVariableTexte.

    Puis je l'affiche sur la console : printf(" maVariableTexte = %s" , maVariableTexte);

    Jusqu’à la tous va bien.

    Le problème est que si maVariableTexte = "toto \r\n tutu" ça ne fait pas de saut de ligne dans la console et ça affiche -> toto \r\n tutu .

    Ça ne prend pas en compte le \r\n alors que si j'écrit en dure "toto \r\n tutu" dans le printf, il y a bien un saut de ligne.

    Même résultat si maVariableTexte = "toto \\r\\n tutu" -> ça affiche : toto \\r\\n tutu dans la console.

    Si je créer maVariableTexte sans passer par la lecture du fichier .txt ça fonctionne :

    char* maVariableTexte = "toto \r\n tutu" -> ça affiche bien ce que je veux : toto (saut de ligne) tutu dans la console.

    Merci d'avance pour votre aide.

    -
    Edité par Nadir27 22 février 2018 à 10:38:07

    • Partager sur Facebook
    • Partager sur Twitter
      22 février 2018 à 11:02:24

      Nadir27 a écrit:

      Bonjour à tous,

      Le problème est que si maVariableTexte = "toto \r\n tutu" ça ne fait pas de saut de ligne dans la console

      char* maVariableTexte = "toto \r\n tutu" -> ça affiche bien ce que je veux : toto (saut de ligne) tutu dans la console.

      Bonjour,

      Ton explication est contradictoire.

      • Partager sur Facebook
      • Partager sur Twitter
        22 février 2018 à 11:02:49

        Montre nous le code de la lecture du fichier texte.
        • Partager sur Facebook
        • Partager sur Twitter
          22 février 2018 à 11:25:11

          int main(int argc, char *argv[])
          {
              FILE* fichier = NULL;
              char maVariableTexte[500] = ""; // Chaîne vide de taille 500
           
              fichier = fopen("test.txt", "r");
           
              if (fichier != NULL)
              {
                  fgets(maVariableTexte, 500, fichier); 
          
                  printf("%s", maVariableTexte);
           
                  fclose(fichier);
              }
           
              return 0;
          }

          Dans mon fichier texte il y a juste écrit "toto \r\n tutu".

          Marc Mongenet, 

          je dit que si j'écris en dure dans ma variable sans passé par le fichier txt ça fonctionne.

          • Partager sur Facebook
          • Partager sur Twitter
            22 février 2018 à 11:41:39

            Je crois avoir compris, dans ton fichier texte, il n'y a pas de caractère \r\n dans le sens ou tu l'entends.

            Dans une chaîne de caractère C, le slash inversé sert à introduire un caractère d’échappement comme les saut de ligne, dans un fichier il représente le caractère '\' ou en C '\\' .

            Dans les fichiers les sauts de ligne sont invisible. Du moins on voit le saut de ligne par le fait de l'écriture sur la ligne suivante.

            ton fichier devrait donc être :

            toto
            tutu

            • Partager sur Facebook
            • Partager sur Twitter
              22 février 2018 à 12:05:21

              rouloude,

              Merci mais malheureusement ce n'est pas possible je ne peux pas changer la forme du fichier txt.

              Le fichier txt est une base de données avec plusieurs lignes et chaque ligne doit avoir des informations de saut de ligne pour un affichage ultérieur.

              Mais je ne pense pas que ça soit possible de cete manière je vais procéder autrement.

              Merci baucoup,

              Cordialement, 

              • Partager sur Facebook
              • Partager sur Twitter
                22 février 2018 à 12:51:50

                Tu peux dire que lorsque tu as lu la séquence "\r\n" (4 caracteres donc), tu les remplaces par un vrai saut de ligne.
                • Partager sur Facebook
                • Partager sur Twitter
                  22 février 2018 à 14:04:09

                  Le '\n', c'est le compilateur qui le change en le code du retour chariot quand il le voit dans le code. En dehors, c'est directement le code du retour chariot qui doit être lu. (enfin '\r' pour retour chariot et '\n' pour nouvelle ligne)

                  -
                  Edité par breizhbugs 22 février 2018 à 14:04:51

                  • Partager sur Facebook
                  • Partager sur Twitter
                  ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                    23 février 2018 à 0:22:44

                    Bonsoir

                    Nadir27 a écrit:

                    Dans mon fichier texte il y a juste écrit "toto \r\n tutu".

                    Marc Mongenet, 

                    je dit que si j'écris en dure dans ma variable sans passé par le fichier txt ça fonctionne.

                    Je vois ce que tu veux dire. Alors il faut savoir que \r est la représentation, dans une chaine de caractères littérale ou un caractère littéral, donc dans le code source, du caractère carriage return (déplace la position active vers la position initiale de la ligne courante).
                    Et \n représente le caractère newline (déplace la position active vers la position initiale de la ligne suivante).
                    On appelle cela des séquences d'échappement. Elles permettent de représenter des caractères spéciaux, et sont interprétées par le compilateur, qui les remplace par le caractère dans l'exécutable généré.

                    Mais ton fichier test.txt n'a rien à voir avec cela. C'est une donnée durant l'exécution. Il faut donc que ton remplaces fasse lui-même le travail du compilateur, soit remplacer \r par carriage return et \n par new line.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    "\r\n" d'un fichier txt ne fait pas de saut

                    × 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