Extraire un champs d'un fichier : Le retour
Résolu
Ka-El
Messages postés
260
Date d'inscription
Statut
Membre
Dernière intervention
-
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
IvyAlice Messages postés 379 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Cette fois je rencontre un problème d'extraction avec le fichier dont je vous communique une partie:
NodeSibling = 0
Name = shared
Alias =
MountName = /app/XIP/Gateway/samples/web/shared
IsMbxRecording = 1
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2092
NodeParent = 1010
NodeChild = 2093
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2093
NodeParent = 2092
NodeChild = 0
NodeSibling = 2094
Name = 2aspheria
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2094
NodeParent = 2092
NodeChild = 0
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2095
NodeParent = 1009
NodeChild = 2096
etc...
J'ai besoin de récupérer les champs où se trouve l'information "name=frestest".
Le fichier incluant les champs doit se présenter de cette façon :
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2092
NodeParent = 1010
NodeChild = 2093
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2094
NodeParent = 2092
NodeChild = 0
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
Pourriez-vous m'apporter votre aide sur le sujet, sachant que je n'ai pas réussit à me débrouiller avec le précédent dossier (Extraire un champs d'un fichier) qui ne me donne pas le résultat attendu...
En vous remerciant par avance.
Cette fois je rencontre un problème d'extraction avec le fichier dont je vous communique une partie:
NodeSibling = 0
Name = shared
Alias =
MountName = /app/XIP/Gateway/samples/web/shared
IsMbxRecording = 1
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2092
NodeParent = 1010
NodeChild = 2093
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2093
NodeParent = 2092
NodeChild = 0
NodeSibling = 2094
Name = 2aspheria
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2094
NodeParent = 2092
NodeChild = 0
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2095
NodeParent = 1009
NodeChild = 2096
etc...
J'ai besoin de récupérer les champs où se trouve l'information "name=frestest".
Le fichier incluant les champs doit se présenter de cette façon :
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2092
NodeParent = 1010
NodeChild = 2093
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
[Directory]
Type = VIRTUAL_DIR
NodeIdent = 2094
NodeParent = 2092
NodeChild = 0
NodeSibling = 0
Name = fredtest
Alias =
MountName =
IsMbxRecording = 0
Comments =
UserData =
FileDisplay = XFB
FileDuplicate = duplicate
Pourriez-vous m'apporter votre aide sur le sujet, sachant que je n'ai pas réussit à me débrouiller avec le précédent dossier (Extraire un champs d'un fichier) qui ne me donne pas le résultat attendu...
En vous remerciant par avance.
A voir également:
- Extraire un champs d'un fichier : Le retour
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
3 réponses
Salut,
Je t'avertis, je ne programme généralement pas de manière très subtile.
Mais si je devais faire ça:
pour chaque ligne de ton fichier d'origine
si pas égale à vide copie la ligne dans fichier.tmp
sinon
dans la variable isFredTest <-- "cat fichier.tmp | grep fredtest | grep name
si isFredTest est différent de vide(donc il a trouvé fredtest et name sur la même ligne dans le fichier avec le bloc qui vient de finir), copier fichier.tmp dans le fichier que tu as choisi
vider fichier.tmp
à la fin dans le fichier que tu as choisi tu te retrouve avec les blocs qui concernent fredtest
Je t'avertis, je ne programme généralement pas de manière très subtile.
Mais si je devais faire ça:
pour chaque ligne de ton fichier d'origine
si pas égale à vide copie la ligne dans fichier.tmp
sinon
dans la variable isFredTest <-- "cat fichier.tmp | grep fredtest | grep name
si isFredTest est différent de vide(donc il a trouvé fredtest et name sur la même ligne dans le fichier avec le bloc qui vient de finir), copier fichier.tmp dans le fichier que tu as choisi
vider fichier.tmp
à la fin dans le fichier que tu as choisi tu te retrouve avec les blocs qui concernent fredtest
Merci (encore une fois...) Zipe31 !
On affichera sur la sortie standard que ce qui sera explicitement demandé plus loin avec le flag "p"
/\[Directory\]/{
Quand on rencontre le motif "[Directory\]" on exécute les commandes entre les accolades (appelé "regroupement de commandes"). Ici on a protégé les crochets contenu dans le motif (\[ et \]) pour ne pas les confondre avec ceux utilisés par les expressions régulières avec les classes de caractères.
:z
On définit une étiquette pour pouvoir s'y brancher à l'aide d'une boucle.
N
Donc une fois le motif "[Directory\]" trouvé, on ajoute la ligne suivante avec la commande "N" dans la mémoire principale de "sed" (appelé aussi "espace de travail").
/\n$/! bz
Dès lors qu'on a ajouté une ligne dans l'espace de travail, on vérifie que le contenu de notre mémoire ne se termine pas ( le "!" à la fin de la recherche du motif étant le signe de la négation) par un caractère fin de ligne (\n), le signe "$" exprimant lui la fin de la ligne. Si ce motif n'est pas trouvé, on se branche à l'étiquette ":z" et on recommence l'opération. Quand le motif est trouvé, on continue à l'instruction suivante.
/Name = fredtest/p
Sil la ligne contient le motif "Name = fredtest", alors on l'imprime (commande "p") sur la sortie standard.
}
Fin du regroupement de commandes.
Merci beaucoup je me sens plus intelligent ;-)
Je ne devrais plus t'embêter avec ça maintenant.
Merci encore et bonne continuation.