Votre navigateur est obsolète. Téléchargez un navigateur moderne, par exemple FireFox.
Léa-Linux : Forum
Le forum de Léa abrite des discussions autour des Logiciels libres.
Syndication
  • RSS ForumForum complet
  • RSS Forum - DéveloppementForum - Développement
  • RSS Forum - Développement - 338757Cette discussion

Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Important : quand vous posez une question, n'oubliez pas de nous donner les indications suffisantes pour que nous puissions répondre. En effet, la divination n'est pas le fort du Linuxien averti. Pour une meilleure compréhension, le bon usage de la grammaire et de l'orthographe est fortement encouragé. En particulier, le langage SMS est à éviter absolument. En cas d'abus, il pourra être censuré sans autre forme de procès.
Les messages dont le contenu est illégal (incitant à la haine - raciale ou autre, diffamant), ou dont le contenu est sans rapport avec le sujet du forum, ou qui sont parfaitement stupides ou hors sujet seront supprimés sans pitié. Il pourra même être fait appel au fournisseur d'accès du coupable pour faire cesser ses agissements.
» Index du forum » Développement » parser un fichier text
Aller à la discussion: PrécédentSuivante
Action: Nouveau sujetChercherS'authentifier
parser un fichier text
Auteur: vitcz (IP enregistrée)
Date: le 4 août 2008 à 11:20

Bonjour a tous,

j'essaye de récupérer deux variables d'un fichier texte. Ce dernier comprend pour chaque ligne les informations suivantes : nom_user, nom_table, nom_champ, séparées par une virgule :

j'essay une syntaxte du type :

utilisateur=$ligne| cut -d -f 2
mdp=$ligne| cut -d -f 3

Mais elle ne me semble pas etre obtimum, j'aimerais que ma boucle puisse supporter les sauts de lignes et les commentaires.

merci d'avance pour vos idées.

Re: parser un fichier text
Avatar
Auteur: Vincent-Xavier JUMEL (IP enregistrée)
Date: le 4 août 2008 à 11:30

Hum, as tu regardé du coté de awk ?

egrep -v '(^#|[\s]*\n)' | awk -F ',' '{print $1}'


En se penchant dans les arcanes de awk (man awk et info awk) tu dois pouvoir tout faire avec !

C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso
Une distribution à découvrir

Re: parser un fichier text
Auteur: vitcz (IP enregistrée)
Date: le 4 août 2008 à 12:32

Bonjour Vincent-Xavier,

Merci pour votre réponse, Je commence a éplucher le man awk, mais c'est tres large et assez puissant. je n'avais pas fini avec le epgrep...
J'ai effectuer le test suivant :

egrep -v '(^#|[\s]*\n)' monfichier.txt | awk -F ',' '{print $1}'

lequel fichier texte contient :

table1, polygone,
table2, point,
table3, autre,
table4, test,
table5, test,

Pourtant : en réponse j'ai

table3
table4
table5

Les deux premiers enregistrement ne sontpas pris en compte

Mon besoin est le suivant : Un boucle dois extraire de ce fichier le nom de la table ainsi que le type d'un champs particulier que mes utilisateurs auront renseigné pour d'une part une création de fichier a partir d'une table et d'autre part un déplacement.

de fichiers une fois ces derniers créer :

j'en arrive a cela :

#créer des fichier depuis la table a partir des enregistrement du fichier texte
egrep -v '^(#| *$)' liste.txt | while read line; do sde2shp -o init -l $table_bdd -f $line$1 -t $line$2 -a all -u $user -p $password ; fi; done

#exporte les fichiers crés a partir de la liste du fichier texte.
egrep -v '^(#| *$)' liste.txtt | while read line; do if [ -f "REP1/$line" ]; then mv "REP1/$line.$1" "REP2/$line.$1" ; fi; done

La deuxième boucle fonctionnait avec sans les argument .$1 et .$2.

Je pense que je n'attribue pas bien les variable : problème de parsing

Re: parser un fichier text
Avatar
Auteur: AlSim (IP enregistrée)
Date: le 4 août 2008 à 13:52

Pour du traitement de texte un peu "avancé" comme ça, il faut se tourner soit vers awk comme te le conseille Vincent-Xavier, soit vers Perl. À toi de voir la syntaxe que tu préfères : celle d'awk est un peu particulière, et Perl utilise les expressions régulières qui ressemblent à :

$champ1 = $1 if m/([^#\n].+), /


[catwell.info]

Re: parser un fichier text
Auteur: vitcz (IP enregistrée)
Date: le 4 août 2008 à 14:29

merci, cela me fais avancer pour la déclaration de la variable, mais pour appeler la valeur dans le :

then mv "REP1/$line......
Je ne vois pas comment rédiger cette partie, je multiplie les tests de syntaxe.

Re: parser un fichier text
Auteur: vitcz (IP enregistrée)
Date: le 4 août 2008 à 15:44

RE-bonjour,

j'ai tester votre syntaxe, et lorsque je fais :

egrep -v '(^#|[\s]*\n)' monfichier.txt | awk -F ',' '{print $1 $2}'

Il ne m'affiche que les données correspondant à une valeure de $2... Comme s'il triait que la premiere valeure de $2 alphabetiquement...c'est tres interessant. J'ai consulter man hawk, mais il reste impreci dans les syntaxes complexe.

AUriez vous une idée pour afficher toutes les valeures svp ?

merci par avance.

Re: parser un fichier text
Avatar
Auteur: Vincent-Xavier JUMEL (IP enregistrée)
Date: le 4 août 2008 à 16:06

La page de man de awk est assez pauvre, je te suggère de regarder la page d'info :
info awk


C'est en forgeant qu'on devient forgeron, et c'est en sciant que Léonard De Vinci !

Mon site perso
Une distribution à découvrir

Re: parser un fichier text
Avatar
Auteur: Иван (IP enregistrée)
Date: le 4 août 2008 à 17:51

$ less testfile
# blablablabla
table1, polygone,

table2, point,


table3, autre,
table4, test,
table5, test,

$ egrep -vw "(^#|^)" testfile | awk -F "," '{ print $1 }'
table1
table2
table3
table4
table5

$ egrep -vw "(^#|^)" testfile | awk -F "," '{ print $1 $2}'
table1 polygone
table2 point
table3 autre
table4 test
table5 test
tada!

Re: parser un fichier text
Avatar
Auteur: Иван (IP enregistrée)
Date: le 4 août 2008 à 19:11

et tout en awk :
$ awk -F"," '$0 !~/^#/ {if (length($0)>1) {print $1 $2}}' testfile
table1 polygone
table2 point
table3 autre
table4 test
table5 test
tadada !

---
awk's awkesome!

Re: parser un fichier text
Auteur: vitcz (IP enregistrée)
Date: le 5 août 2008 à 14:48

Je m'en suis sorti avec un egrep :

egrep -v '^(#|*$|[\s]*\n)' liste.txt | awk -F ',' '{print $1 $2}'| while read line; do if ......

Mais là wooaw avec juste un Hawk c'est tres efficace. MErci beaucoup, je vais continuer a explorer les possibilités de Hawk, c'est tres puissant.

Re: parser un fichier text
Avatar
Auteur: Иван (IP enregistrée)
Date: le 5 août 2008 à 15:42

Et plus rapide...
time egrep -vw "(^#|^)" testfile | awk -F "," '{ print $1 $2}'
[...]
real    0m0.019s
user    0m0.008s
sys     0m0.008s

time awk -F"," '$0 !~/^#/ {if (length($0)>1) {print $1 $2}}' testfile
[...]
real    0m0.014s
user    0m0.000s
sys     0m0.004s
Ce doit être d'autant plus évident que les fichiers seront plus conséquents.

À lire : [The Grymoire]

Re: parser un fichier text
Avatar
Auteur: oudoubah (IP enregistrée)
Date: le 7 août 2008 à 10:37

En awk, on peut simplifier la commande (histoire de point de vue purement subjectif):
awk -F ',' '/^[^\#]/ {print $1,$2}' fichier


on affiche les deux premiers champs de toute ligne qui a un premier caractère et qui est différent de #

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Re: parser un fichier text
Auteur: Nsd (IP enregistrée)
Date: le 8 août 2008 à 18:13

et avec sed?..
cat fichier | while read line; do
eval $(echo "$line" | sed 's/^\ *\(.\+\),\(.\+\),\(.\+\)/user=\1; table=\2; champ=\3;/')
echo "user is $user, table is $table and champ is $champ"
done



Nom du forum : (antispam) - (en développement:saisir un texte pour le message, rempli cette zone automatiquement)
Votre nom: 
Votre email: 
Sujet: 

 
Ce forum est boosté par Phorum.