Comment passer plusieurs commandes UNIX avec LANCER PROCESS EXTERNE

Stéphanie Tirtiat

Concaténation de fichiers, recherche et récupération du résultat avec les commandes Unix et LANCER PROCESS EXTERNE. ♪

- Titre : Comment passer plusieurs commandes UNIX avec LANCER PROCESS EXTERNE

- Auteur : Stéphanie Tirtiat

- Parution : 28 juin 2006

- Licence : Copyright ® 2006 4D s.a.. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

Produit : 4D 2004  ·  Plateforme : Mac

Exemple de problématique demandée :

Vous avez plusieurs fichiers texte comportant des numéros écrits dans le format >0123456789<.

Vous voulez effectuer une recherche globale dans tous ces fichiers pour retourner le premier numéro comportant 7 chiffres.

Vous utilisez la ligne de commande Unix suivante qui comporte trois actions :

1. /bin/cat tmp/4D_001 tmp/4D_002 tmp/4D_003 | /usr/bin/ruby -ne '$_=~/>([0-9]{7})</; next unless $1; print $1; exit' | /usr/bin/pbcopy

- Action 1 : cat concatène les fichiers 4D_001, 4D_002, 4D_003

- Action 2 : ruby (et son script) cherche et retourne le premier nombre de 7 chiffres de 0 à 9

- Action 3 : pbcopy copie le résultat dans le presse-papiers

Pour effectuer la même manœuvre avec la commande 4D LANCER PROCESS EXTERNE :
https://4d.developpez.com/documentation/4DDoc2004/CMF/CMF00811.HTM

C_TEXTE(lpe_in;lpe_out;lpe_erreur;lpe_commande)

`cat tmp/4D_001 tmp/4D_002 tmp/4D_003 : concatène les fichiers 4D_001, 4D_002, 4D_003
$commande_1:="cat Users/stirtiat/tmp/4D_001 Users/stirtiat/tmp/4D_002 Users/stirtiat/tmp/4D_003"
`script ruby : cherche et retourne le premier nombre de 7 chiffres de 0 à 9
$commande_2:="/usr/bin/ruby -ne '$_=~/>([0-9]{7})</; next unless $1; print $1; exit'"
`pbcopy : copie le résultat dans le presse-papiers
$commande_3:="/usr/bin/pbcopy"

`$commande_1 concatène les données des 3 fichiers
`le résultat est retourné dans lpe_out
LANCER PROCESS EXTERNE($commande_1;lpe_in;lpe_out;lpe_erreur)

`lpe_out devient le paramètre d'entrée pour $commande_2
`puisqu'on cherche dans les données concaténées
lpe_in:=lpe_out
LANCER PROCESS EXTERNE($commande_2;lpe_in;lpe_out;lpe_erreur)

`lpe_out contient maintenant le numéro à 7 chiffres trouvé
`et devient le paramètre d'entrée de $commande_3 qu'on va afficher dans le presse-papier
lpe_in:=lpe_out
LANCER PROCESS EXTERNE($commande_3;lpe_in;lpe_out;lpe_erreur)

`affiche le presse-papier
ALERTE(Lire texte dans presse papiers)

Code simplifié

C_TEXTE(lpe_in;lpe_out;lpe_erreur;lpe_commande)

$commande_1:="cat Users/stirtiat/tmp/4D_001 Users/stirtiat/tmp/4D_002 Users/stirtiat/tmp/4D_003"
$commande_2:="/usr/bin/ruby -ne '$_=~/>([0-9]{7})</; next unless $1; print $1; exit'"
$commande_3:="/usr/bin/pbcopy"

LANCER PROCESS EXTERNE($commande_1;lpe_in;lpe_out;lpe_erreur)
LANCER PROCESS EXTERNE($commande_2;lpe_out;lpe_out;lpe_erreur)
LANCER PROCESS EXTERNE($commande_3;lpe_out;lpe_out;lpe_erreur)

ALERTE(Lire texte dans presse papiers)