|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonjour,
Mon objectif est de faire des tests de contrôle sur 3 chaînes de caractères selon leur présence (ou non) dans un fichier, sans oublier aucun cas de figure possible! Pour chaque test, je dois afficher un message de succès ou d'échec sur l'écran, et l'écrire dans un fichier. Et pour me compliquer encore la vie, tous mes tests de contrôle doivent eux-mêmes se situer à l'intérieur d'une grande boucle if/then/else/fi... Ce que je sais faire « à peu près » : tester la présence ou non d'un seul pattern dans un fichier (merci de corriger si j'ai faux, car je suis encore sûr de rien, Bonjour à: Sve@r, N_BaH et zipe31 Code :
) 1) Les 3 chaînes sont dans mon fichier. 2) Les 3 chaines n'y sont pas. 3) EXP1 seul y est, EXP2 et EXP3 n'y sont pas. 4) EXP2 seul y est, EXP1 et EXP3 n'y sont pas. 5) EXP3 seul y est, EXP1 et EXP2 n'y sont pas. 6) EXP1 et EXP2 y sont, EXP3 n'y est pas 7) EXP1 et EXP3 y sont, EXP2 n'y est pas 8) EXP2 et EXP3 y sont, EXP1 n'y est pas Mes questions : 1) Ai-je cité tous les cas de combinaisons possibles ? 2) Comment couvrir tous les cas énumérés en utilisant peu de commandes ou en tout cas la méthode la plus élégante possible et surtout la plus courte (économe en nombre de if). Voici mon grand if dans lequel doivent se situer mes tests de contrôle: Code :
|
||||
|
|
00
|
|
|
#2 | |||||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour,
Citation:
Code :
Code pseudo-code :
si aucune expression ne correspond match reste à zéro. il y a d'autres possibilités pour définir flag, voire des manières de faire sans finalement, utilise un case sur chaque valeur possible de match … ? |
|||||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
N_BaH, je suis désespéré, car je serais réellement incapable de programmer ce que tu viens de décrire
Je ne pensais pas que c'était si difficile - enfin tel que je le vois actuellement en tout cas... Je pensais à un truc qui pourrait se résoudre en 1 ou 2 lignes (3 au maxi) commandes, avec par exemple un vieux egrep : Et que toute la bataille va se jouer sur comment réduire les 8 possibilités que j'ai énumérées et dont certaines seraient logiquement inutiles voire erronées... Là, du coup, je ne sais pas trop quoi faire... |
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Benjamin Consultant informatique Inscription : août 2007 Messages : 160 ![]() |
En faisant cela, tu aurais vu que tu peux définir plusieurs patterns de sélection en faisant cela :
Code :
grep -i 'PATTERN1|PATTERN2|PATTERN3' /my/file |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
je me suis peut-être pris les pieds dans le tapis...
ôtes-moi un doute : quelle importance de savoir si les regexp correspondent dans le fichier ? faut-il les identifier pour accomplir des actions différentes selon le cas ? c'est ce que j'ai compris : Citation:
|
|
|
|
00
|
|
|
#6 | |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Si elles sont toutes dans le fichier, je sors de la boucle et passe à autre chose (l'étape suivante dans le script). Si aucune n'est dans le fichier, alors là, je fais plusieurs traitement des mv, des cp, etc. |
|
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Citation:
le traitement est-il différent selon que c'est l'expression 1, ou la 2, ou la 3, qui est trouvée ? expr1 trouvée => traitement_1 expr2 trouvée => traitement_2 … exprX et exprY trouvées => traitement_N ? sinon, effectivement, si le traitement ne dépend que de la présence d'une des expressions, alors if egrep "$EXP1|$EXP2|$EXP3" "myfile"; then devrait suffire. edit: ah |
|
|
|
00
|
|
|
#8 | |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
exp1 trouvée => traitement_1&2...N exp2 trouvée => traitement_1&2...N … expX et expY trouvées => traitement_1&2...N Maintenant, d'un autre côté : exp1 ET exp2 ET exp3...ET expN non-trouvées => traitement_particulier |
|
|
|
00
|
|
|
#9 | ||||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
tu n'as donc que trois cas a considérer (en fait deux) :
Code pseudo-code :
par contre, il faut d'abord énumérer : Code :
|
||||
|
|
00
|
|
|
#10 | |||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Code :
Et puis comment écrire exactement le "1 ou 2)", remplacer le "ou" par un "OR" ou un "|" ou bien le laisser tout simplement tel qu'il est ? |
|||
|
|
00
|
|
|
#11 | |||||||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Citation:
s'il n'y a pas d'occurrence, nbDoccurrences n'aura pas de valeur, donc Code :
Code :
Code :
|
|||||||
|
|
00
|
|
|
#12 | |||||||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
|
|||||||
|
|
00
|
|
|
#13 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
probablement pas, ça ne fonctionne déjà pas avec ash...
par contre, la troisième, que j'ai simplifiée dans mon précédent post) est facilement transposable entre crochets simples. |
|
|
00
|
|
|
#14 | |
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Quand je te demandais quoi mettre à la place du nbDoccurrences, je voudrais dire qui lui donnera ses valeur 0, 1|2 et 3) ? Comme on est dans un case, ces valeurs doivent-être connues à l'avance, mais ici je ne vois pas par quel moyen, à moins. |
|
|
|
00
|
|
|
#15 | |||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#16 | ||||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
Tu as dû faire des maths dans ta vie. Combien de cas possibles pour 3 éléments dont chacun peut prendre deux valeurs distinctes ? Réponse: 2^3 Citation:
Associer elem1 à 4, elem2 à 2 et elem3 à 1 Si elemX est présent alors ajouter sa valeur à flag Au final, si flag vaut
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||||||
|
|
00
|
|
|
#17 | |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 071 ![]() |
Bonjour Sve@r,
Citation:
SIX
|
|
|
|
00
|
|
|
#18 | ||||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Bonjour N_BaH,
Je suis désolé, je n'arrive pas lorsque tu me me dis : il faut d'abord énumérer : Code :
Code :
|
||||
|
|
00
|
|
|
#19 | ||
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
En espérant avoir tout compris... Un petit exemple basé sur le nombre d'occurrences différentes rencontrées dans les différentes fichiers : Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
00
|
|
|
#20 | |||||
|
Membre du Club
![]() Inscription : septembre 2011 Messages : 54 ![]() |
Citation:
Juste une petite précision : Je n'ai pas plusieurs fichier fich* dans lesquels je cherche des regexp. J'ai un seul fichier "myfile" qui contient 3 chaînes dont je cherche les occurrences. Et selon qu'elles existent ou non dans mon fichier, je dois faire des actions : des mv, des cp, de simples affichages sur l'écran et dans un fichiers, sortir sans rien faire, etc... Par ailleurs, je ne vois toujours pas comment marier vos code avec le mien qui est ici (où je commence d'abord par tester si mon fichier "myfile" lui même existe, j'aimerai donc voir comment vous intégrez vos code au mien ) : Code :
|
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com