Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 17-08-2010 16:32:20

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Wiki - Scripts recherche et lecture de fichiers - readfile

Un script pour lire ligne par ligne un fichier texte.
C'est là :
http://debian-facile.org/doc:programmat … hier-texte

et c'est de cthuluh im'self ! lol

Dernière modification par smolski (23-08-2010 10:48:24)


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#2 17-08-2010 16:39:49

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : Wiki - Scripts recherche et lecture de fichiers - readfile

Là, je pige pas bien comment l'adapter à mes fichiers perso.

Tu pourrais ajouter le contenu du fichier traité afin d'éclairer davantage son utlisation ?
Et tu pourrais mettre un second fichier à consulter en exemple afin que nous distinguions mieux les manipulations à faire, depuis l'un, et pour l'autre.

Dis... tu peux ? wink

Yaoooh ! big_smile

"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#3 17-08-2010 17:08:45

cthuluh
Membre
Distrib. : stable
Noyau : stable
(G)UI : ratpoison
Inscription : 17-08-2010

Re : Wiki - Scripts recherche et lecture de fichiers - readfile

Hey

En fait, c'est beaucoup plus simple que ça en a l'air.
La logique se résume ainsi :

while IFS= read -r ligne; do
# Faire quelque chose avec la variable "$ligne"
done < fichier


Tant que read n'a pas atteint la fin du fichier, il renvoie "Vrai" (0 en shell).
Donc la boucle se poursuit jusqu'à la fin du fichier.
De plus, read utilise par défaut le caractère "fin de ligne" ou '\n' comme délimiteur.
C'est à dire qu'il lit une et une seule ligne à la fois
On le laisse donc faire son travail comme un grand !
Le "IFS=" et le "-r" sont un mal nécessaire (quoi qu'avec bash on puisse se passer
de l'utilisation de "IFS=", en utilisant la variable spéciale "$REPLY").

Moi y'en a être clair ? smile

Dernière modification par cthuluh (17-08-2010 17:09:14)

Hors ligne

#4 17-08-2010 17:11:22

cthuluh
Membre
Distrib. : stable
Noyau : stable
(G)UI : ratpoison
Inscription : 17-08-2010

Re : Wiki - Scripts recherche et lecture de fichiers - readfile

Mmmmmmh.
En français, on pourrait traduire ça ainsi :

Tant que read arrive à lire une ligne et à mettre le résultat dans la variable ligne, alors
  Faire des trucs avec "$ligne"
Fin tant que  < fichier

Hors ligne

#5 17-08-2010 17:22:53

cthuluh
Membre
Distrib. : stable
Noyau : stable
(G)UI : ratpoison
Inscription : 17-08-2010

Re : Wiki - Scripts recherche et lecture de fichiers - readfile

Un exemple de ce qu'il ne faut pas faire :

for ligne in $(cat fichier); do
    # faire des trucs avec "$ligne"
done


Ca y'en a pas être bon du tout.
Tout d'abord, le "for ligne in $(cat fichier)" n'itère pas sur les lignes contenues dans le fichier,
mais sur les **mots** qu'il contient. Ce n'est bien évidemment pas ce que l'on cherche à faire.
Mais il y a pire !
La meilleure façon de voir ce qui cloche, c'est d'essayer :

$ cat fichier
bonjour * smolski
$ for ligne in $(cat fichier); do echo "$ligne"; done


Le résultat devrait vous surprendre.
En effet, lorsqu'on tape sur entrée, voici ce qui se passe :

$ for ligne in $(cat fichier); do echo "$ligne"; done
# qui devient :
$ for ligne in bonjour * smolski; do echo "$i"; done
# qui devient enfin :
$ for ligne in bonjour fichier un_autre_fichier un_repertoire smolski; do echo "$ligne"; done
# Le résultat final :
bonjour
fichier
un_autre_fichier
un_autre_repertoire
smolski
$
# En admettant que le répertoire courant contienne les fichiers "fichier", "un_autre_fichier" et le répertoire "un_autre_répertoire".


On est loin de ce que l'on voulait au départ ! smile

Dernière modification par cthuluh (17-08-2010 17:24:14)

Hors ligne

#6 19-08-2010 21:14:28

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : Wiki - Scripts recherche et lecture de fichiers - readfile

Mais comment tu inscrit le fichier à lire dans ce script ?

La variable :

fichier=/chemin/du/fichier


Ne manquerait-elle pas ?

mmmh ? smile


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

Pied de page des forums