• # Quelques suggestions

    Posté par (site web personnel) . En réponse au message Traitement par lot et sed. Évalué à 5.

    La solution de Frédéric est très bien. Je la complète par quelques remarques:

    1. Il faut valider les données. (Frédéric l'a dit, mais on ne le répète jamais assez!)

    2. Cas particulier de 1., ta fonction de remplacement ne marche plus si ton entrée contient un caractère /.

    3. SED permet d'utiliser un autre caractère que / pour délimiter ses opérandes, si ton entrée peut contenir tout type de caractères imprimables, le mieux est d'utilsier un caractère… non-imprimable! Par exemple ^A (ASCII 1, obtenu par C-q C-a dans Emacs).

    4. Je suppose que tu fais un remplacement pour chaque variable. SED peut réaliser plusieurs opérations (avec l'option -e) ce qui te permettrait d'économiser des appels, au prix de quelques acrobaties avec les variables du shell. Une autre méthode permettant de ne faire qu'un seul appel à SED consiste à générer un script SED (paramètre -f de SED), par exemple à partir d'un HERE-DOC. C'est très pratique parceque les variables sont remplacées dans les HERE-DOC

    form_date=`date "+%Y-%m-%d %H:%M:%S"`
    form_nom='A. Nonyme'
    cat > replace.sed <<EOF
    s^A--DATE--^A${form_date}^Ag
    s^A--NAME--^A${form_nom}^Ag
    EOF
    sed -i '' -f replace.sed $SPOOLDIR/after-import-$COMMUNAUTE.sql
    
    

    Les HERE-DOCs sont une fonction très pratique (car on peut les piper) du shell, souvent sous-estimée.

    1. Quitte à faire du HERE-DOC, on peut aussi envisager de produire directement le fichier $SPOOLDIR/after-import-$COMMUNAUTE.sql avec un HERE-DOC, comme dans
    form_date=`date "+%Y-%m-%d %H:%M:%S"`
    form_nom='A. Nonyme'
    cat > $SPOOLDIR/after-import-$COMMUNAUTE.sql <<EOF
    
     SET
     nom="${form_nom}",
    
     date_creation="${form_date}",
    
    EOF
    
    
    1. La convention dans les scripts shell est plutôt d'utiliser la majuscules pour les variables d'environnement et les minuscules pour les variables du script. Ça évite notamment de modifier l'environnement par erreur.

    2. La mise-en page de mon commentaire avec Mark-Down est pas super.

    3. Il faut valider les données.

    XKCD: Exploits of a MOM