Forum Astuces.divers traiter des blocs de texte pour composer de gros documents flexibles

Posté par  . Licence CC By‑SA.
2
8
fév.
2022

bonjour

je voudrais créer de manière flexible de gros documents à partir de blocs de texte préformulés dans de petits (ou non) documents individuels mémorisés au format texte sur le disque dur dans le même répertoire (ou un sous-répertoires …/ressources/…" par insertion

et l'idéal, même, serait de pouvoir le faire avec un simple script (comme on fait avec apt-get install dans debian pour installer des paquets… j'installerais là des segments de texte.

exemple:

insert textes-suivants monAdresse.txt adresse2tartempionBleu.txt lieuDateRef.txt salutations.txt referenceEtCoordonnées.txt gueuler.txt saluerPolimentQuandmeme.txt piecesJointes.txt

me permettrait de composer une lettre de réclamation standard, ou, vice-versa de répondre à une telle lettre, ou de proposer une nouveauté, ou des services, un rappel, une mise en demeure, etc.

et les textes étant préformulés, ils pourraient être dans une langue que je ne maîtrise pas vraiment.

je crois qu'un ancien éditeur de texte permettait cela (au moins en direct: la fonction "insert" ou équivalente y était au menu dans l'onglet "file", et, souvent, certainses applications consoles s'appropriaient à être utilisées par un script extérieur en ligne de commande via une telle ligne de noms de modules à traiter.

quelqu'un saurait-il encore de quel éditeur de texte il peut s'agir (en espérant que ce ne soit pas emacs, qui est une vraiment grosse horloge demandant beaucoup d'apprentissage avant de pouvoir l'utiliser beaucoup avec dextérité!)?

par ex. la minuscule puce "wordgrinder" peut en console exporter son text dans des formats absolument inattendus pour un tel outil minuscule! pourrait-il aussi récupérer des textes et les insérer?

crdlmt

  • # vi

    Posté par  (site web personnel, Mastodon) . Évalué à 4.

    je crois qu'un ancien éditeur de texte permettait cela […]

    quelqu'un saurait-il encore de quel éditeur de texte il peut s'agir (en espérant que ce ne soit pas emacs, qui est une vraiment grosse horloge demandant beaucoup d'apprentissage avant de pouvoir l'utiliser beaucoup avec dextérité!)?

    Comme tu as écrit « ancien » et exclu Emacs, je n'ai pas pu résister à l'envie trollesque d'évoquer son cousin Ex/Vi. Dans ton fichier de travail :

    • Tu te positionne sur la ligne après laquelle doit se faire l'insertion et tu tapes :read cheminRelatifOuAbsoluDuFichier
    • De n'importe où, en connaissant le numéro N de la ligne après laquelle doit se faire l'insertion, tu tapes :Nread cheminRelatifOuAbsoluDuFichier

    Attention à bien taper aussi les deux-points au début si c'est bien Vi. Et on est en mode commandes (et non insertion) dans les deux cas. Pour les usagers avancés, ce n'est pas une opération (ou commande pour faire simple) qui bénéficie de la répétition.
    À vérifier (je n'ai pas de quoi le faire là, mais je crois bien que), dans le menu de GViM ça y est.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # cat

    Posté par  (site web personnel, Mastodon) . Évalué à 4.

    Je ne sais pas si j'ai bien compris…

    exemple:

    insert textes-suivants monAdresse.txt adresse2tartempionBleu.txt lieuDateRef.txt salutations.txt referenceEtCoordonnées.txt gueuler.txt saluerPolimentQuandmeme.txt piecesJointes.txt

    me permettrait de composer une lettre de réclamation standard, ou, vice-versa de répondre à une telle lettre, ou de proposer une nouveauté, ou des services, un rappel, une mise en demeure, etc.

    …mais tu veux concaténer des contenus de fichiers non ? Du coup ta commande "insert" s'appelle en fait con"cat"enate (aucun rapport avec quelque félin) :

    cat textes-suivants monAdresse.txt adresse2tartempionBleu.txt lieuDateRef.txt salutations.txt referenceEtCoordonnées.txt gueuler.txt saluerPolimentQuandmeme.txt piecesJointes.txt

    le résultat est envoyé sur le terminal (il faut que ton script redirige donc vers le fichier final) et les fichiers en argument ne sont pas modifiés.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

    • [^] # Re: cat

      Posté par  . Évalué à 1.

      bien sur, excellent! c'est ce que je fais avec mes fichiers "son" pour amalgamer des phrases par exemple de cours Assimil pour en faire des paragraphes prononces en entier donc! que je suis bete de ne pas le faire avec les textes …

      • [^] # Re: cat

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

        Héhé. c'est juste le manque d'habitude je pense. Mais pas à pas on acquière des réflexes ;-)

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # template

    Posté par  (Mastodon) . Évalué à 4. Dernière modification le 09 février 2022 à 07:43.

    Je penses aux moteurs de template ?

    Tu écris un document en laissant des champs, et ensuite tu as un outil pour remplir ces champs à la volée. C'est énormément utilisé en développement Web : la page HTML est écrite sous forme de template et le moteur du site rempli les trous. Tu peux regarder du côté de Jinja par exemple.

    Sinon en cherchant des moteurs en Bash je suis tombé sur cette question et la commande envsubst.

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # DITA

    Posté par  . Évalué à 4.

    Ça s'appelle la documentation structurée. C'est très utilisé dans l’aéronautique et dans une grosse partie de l'industrie (construction navale, automobile, fondeurs, …). En fait là ou on doit construire des manuels.
    Les normes utilisées dans l'aéronautique sont :S1000D, ATA2300, …
    Pour les besoins plus simples type bureautique, il y a la norme DITA, il existe des plugins pour word, je n'en connais pas pour LibreOffice, mais ça ne veut pas dire qu'il n'en existe pas.
    Le pricinpe est très simple : On a des fragments de documents (en xml) dans un référenciel d'une part, une.des feuilles de style et un sommaire (fichier xml qui liste les fragmeznts et leur ordre) d'autre part.
    les fragments sont "concaténés" suivant les directives du sommaire, la feuilles de style choisie est appliques cela donne un Document.
    Parmi les avantages :
    - Réutilisation des fragments
    - réduction des coûts de traduction (un fragment n'est traduit qu'une fois même s'il est dans plusieurs documents)
    - séparation du fond et de la forme
    - …

    • [^] # Re: DITA

      Posté par  . Évalué à 3. Dernière modification le 09 février 2022 à 11:19.

      Je me réponds à moi-même
      D'autres avantages :
      - Les traduction sont considéré comme un genre de "style" appliqué à tous les fragments d'un documents => on a donc un seul document quelque soit la langue, la langue n'est qu'un rendu
      - La gestion de version se fait au niveau du fragment
      - Dans l'aéronautique, il y a la notion d'applicabilité, qui permet d'avoir un seul manuel pour une famille d’appareils (le h160 par exemple) et les fragment sont inclus ou non lors de la fabrication du document en fonction de la version de l’appareil, de ses optionnels, de son numéro de série, …

  • # Dans LibreOffice

    Posté par  . Évalué à 4.

    Dans LibreOffice Writer (le traitement de texte, il y a la possibilité d’insérer des sections éventuellement importées de documents externes : « Les sections permettent d'insérer des blocs de texte issus d'autres documents, […] »

  • # variations autour de sed

    Posté par  . Évalué à 1. Dernière modification le 09 février 2022 à 13:55.

    cp \<template\> \<fichier\>
    sed -i -e 's:\<Nom_De_Champ_Dans_Le_Template\>:\<valeur qu'on veut\>:g' <fichier>
    

    ces commandes copient un template avec des pattern de champ à remplir, pour les substituer avec la commande sed directement dans le fichier (-i). Il est possible d'enchainer plusieurs options -e de sed, ou d'invoquer la commande plusieurs fois. L'option "g" des regex c'est pour appliquer la substitution plusieurs fois pour chaque ligne au cas où le pattern s'y trouverais plus d'une fois. En shell ça donnerait avec "" comme pattern à substituer:

    destinataire='Mme Michu'
    sed -i -e 's:<destinaire>:$destinataire:g' fichier
    

    Tu peux définir une variable et l'utiliser. Il serait possible de modifier la salutation dépendamment du genre: « Cher » ou « Chère » en utilisant la même commande sed avec un système de conditions…

    Bref c'est méga-scriptable. Et tu peux faire de trucs chouettes à partir des expressions rationnelles (regular expression, ou regex en Anglais), c'est puissant mais tu peux aussi juste te contenter de chercher et substituer des patterns fixes. Tu peux aussi utiler "sed -e substitution1 -e substitution2 -e stubstiution3 … template >> doc" pour ajouter chaque template ajusté à la suite d'un document à partir d'une liste de template. Ou même jouer avec des variable shells globales.

  • # Mise en page… Scribus

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

    Tu sembles vouloir faire du remplissage de blocs dans un document pré-structuré. Regarde si Scribus, avec ses possibilités de scripting via Python3, ne permettrait pas (une fois le modèle défini) de faire des remplissages faciles.

    https://www.scribus.net/

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

Suivre le flux des commentaires

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