Forum général.général Texte tronqué à 80 caractères: comment réparer ?

Posté par  (site web personnel) .
Étiquettes :
1
20
mai
2011

Si j'ai un long texte qui a un renvoi à la ligne à partir de 80 caractère, un
peu comme ce texte quoi, et que je veux enlever ces retours à la ligne foireux
comment est-ce que je peux faire ?
Il doit bien y avoir une suite de commandes bash magiques qui vont faire le
boulot à ma place non ?

  • # paragraphes

    Posté par  . Évalué à 8.

    La question est de savoir comment tu arrives à détecter qu'un retour à la ligne est en raison du wordwrap ou si il est volontaire (comme pour celui avant tes deux dernières lignes).

    On peut se baser sur le mot de la ligne suivante en estimant que si il est plus long que l'espace restant sur la ligne actuelle, c'est du wordwrap, mais la possibilité de faux-positifs n'est pas négligeable.

  • # vim

    Posté par  . Évalué à 4.

    Si le texte est dans un fichier:

    vim -c ":%s/\n/ /g" -c ":x" <fichier>
    

    Attention, cette commande modifie le fichier.
  • # j'ai bien une solution, mais j'ai comme un doute

    Posté par  . Évalué à 5.

    tr -d '\n' < text.txt
    hop plus de retour à la ligne nuisible ;)

    mais bon ça manque cruellement de précision su la forme du texte actuel et de la forme souhaitée

    comme autre solution y a la possibilité de remplacer tous les \n\n par pikaplop
    puis de remplacer pikaploppikaplop par un \n\n
    et enfin les pikaplop restant par rien.

    mais ça ne marche que si le texte saute des lignes entre les paragraphe. Sinon si y a des tabulations ou des espaces en début de paragraphe il doit être possible de remplacer les \n\t par un pikaploppikaplop et supprimer les autre \n.

    Tu peux aussi considérer qu'une majuscule en début de ligne peut raisonnablement être considérée comme un début de paragraphe.

    Enfin bref la bonne méthode dépend vraiment du fichier.

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # suppression

    Posté par  (site web personnel) . Évalué à 1.

    sed 's/(.{80})(.)/1/g' file

  • # Python

    Posté par  (site web personnel) . Évalué à 1.

    Le module python textwrap fait ce genre de chose :

    • [^] # Re: Python

      Posté par  . Évalué à 2.

      Hors sujet :
      Il doit bien y avoir une suite de commandes bash magiques qui vont faire le
      boulot à ma place non ?

      Ca commence à devenir pénible cette façon de mettre du python partout.

      • [^] # Re: Python

        Posté par  (site web personnel) . Évalué à 5.

        Bah, de toute façon, « commande bash » ça ne veut pas dire grand chose, donc à ce compte, on va dire que python est une commande bash.

        • [^] # Re: Python

          Posté par  . Évalué à 3.

          je sais, je rale par principe :). Ca aurait été pareil si on avait parlé de XML dans un fichier de conf ... ;)

          • [^] # Re: Python

            Posté par  (site web personnel) . Évalué à 3.

            C'est moi ou tu compares Python à du XML dans un fichier de configuration ?

            HÉRÉTIQUE, AU BUCHER !

            • [^] # Re: Python

              Posté par  (site web personnel) . Évalué à 2.

              J'approuve la torture de l'accusé jusqu'à son admission de l'infériorité de Python face à la plupart des langages, y compris XML (ce qui n'est pas peu dire).

              pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: Python

      Posté par  (site web personnel) . Évalué à 1.

      j'aimerais bien un exemple parce que pour moi ce module n'est absoluement pas approprié à ce cas.
      le module permet de formatter du texte à une colonne donnée ou de le désindenter.

      je ne vois nulle part de quoi faire ce que demande patrick_g !

      • [^] # Re: Python

        Posté par  (site web personnel) . Évalué à 1.

        Ok, j'avoue, j'étais à côté de la plaque. La question m'a fait pensé à ce module, j'ai retrouvé la doc et posté sans relire précisément ce qu'il faisait.

        Tant pis pour ceux qui n'aime pas python, mais puisqu’on me le demande :

        # coding: utf-8
        
        import textwrap
        
        text = """Si j'ai un long texte qui a un renvoi à la ligne à partir de 80 caractères, un
        peu comme ce texte quoi, et que je veux enlever ces retours à la ligne foireux
        comment est-ce que je peux faire ?
        
        Il doit bien y avoir une suite de commandes bash magiques qui vont faire le
        boulot à ma place non ?"""
        
        unwraped_text = ""
        
        for line in text.splitlines():
            if line.strip():
                unwraped_text += line.strip()
                unwraped_text += " "
            else:
                unwraped_text += "\n"
        
        print("\nOrignal:\n%s" % text)
        
        print("\nUnwrap:\n%s" % unwraped_text)
        
        print("\nRewrap:\n%s" % textwrap.fill(unwraped_text))
        

        P.S: ce n'est sûrement pas parfait ; je conserve les paragraphes pour l'unwrap, contrairement à textwrap.

  • # paaatrick

    Posté par  (site web personnel) . Évalué à 3.

    je suis décu :-(

    je pensais que patrick_g était un hacker.

    • [^] # Re: paaatrick

      Posté par  (site web personnel) . Évalué à 3.

      Non, c'est un rédacteur c'est tout.

      • [^] # Re: paaatrick

        Posté par  (site web personnel) . Évalué à 0.

        bin c'est déjà pas mal !! vu les publications et leur qualité

        mais je pensais, vu le détail des papiers, genre sur le kernel, que tu étais plus impliqué que ça.

        enfin bon, faut pas le prendre pour un jugement de valeur. juste une réaction de surprise au sujet de la question.

    • [^] # Re: paaatrick

      Posté par  . Évalué à 2.

      Pourtant un patch noyau qui édite tout texte pondu ce serait une bonne idée!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.