• # Quelques exemples

    Posté par (site web personnel) . En réponse au message Générer des fichiers texte selon un modèle. Évalué à 2. Dernière modification le 08 janvier 2013 à 21:03.

    Voici une liste de techniques. Ma préférence personelle irait à la solution M4+AWK ou SED+AWK.

    Pour ton fichier base de données, je te conseille d'utilsier un séparateur (comme `|') plutôt que des blancs, le séparateur est beaucoup plus facile à manipuler (AWK, sort, shell IFS).

    Here-docs

    Interpolation des variables dans les here-documents du shell.

    Exemple:

    print_usage()
    {
     cat <<EOF
    ${PROGNAME} [-h]
     Does nothing special
    EOF
    }
    
    

    Tu peux l'interfacer avec une boucle for et jouer sur le input field splitting IFS pour faire ton mailing facilement.

    datasource()
    {
    cat <<EOF
    Pierre|21
    Paul|22
    Jacques|45
    EOF
    }
    prepare_text_loop()
    {
     local saved_ifs
     local name
     local age
     saved_ifs="$IFS"
     IFS='|'
     while read name age; do
    prepare_text "$name" "$age"
     done
    IFS="$saved_ifs"
    }
    prepare_text()
    {
    cat <<EOF
    1ドル a 2ドル ans
    EOF
    }
    datasource | prepare_text_loop
    
    

    SED & AWK

    Ici tu as un fichier externe qui contient des champs génériques comme %%NOM%% et %%AGE%%. Tu utilises AWK pour lire ta base de données et préparer une commande SED qui remplacera les variables en question. Tu peux faire le pipe vers SED directement depuis AWK.

    M4 & AWK

    Ici tu utilises le préprocesseur générique M4 au lieu de SED pour produire le texte final. À part cela, la technique ressemble à la précédente.

    Écrire un programme spécialisé

    Tu peux bien-sûr écrire un programme spécialisé dans le langage de ton choix. Cela sort un peu de ta question de départ, plutôt dans le trip «vite fait, bien fait.» Si tu es déjà à l'aise avec SED et AWK, c'est un choix sûr. Si tu ne sais pas encore programmer en M4 cela ressemble beaucoup à TeX (on écrit un programme qui écrit sa propre suite).