Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
bk930
16/02/2010, 17:43
je souhaiterai récupérer une partie d'un texte dans un fichier txt
qui se présente comme le fichier attachés (Display.txt) :
Je souhaite d'abord lire le fichier ligne par ligne et puis je souhaite afficher des informations comme :
Vlan : 1
Nombre de ports total : 20
Nombre de ports connecté : 2
Nombre de ports nonconnecté : 18
Liste de ports connectés : Gi1/0/1,Gi1/0/2
List de ports nonconnectés : Gi1/0/3,Gi1/0/4,Gi1/0/5,Gi1/0/6,Gi1/0/7,Gi1/0/8,Gi1/0/9,Gi1/0/11,Gi1/0/12,Gi1/0/13,Gi1/0/17,Gi1/0/18,Gi1/0/19,Gi1/0/20,Gi1/0/25,Gi1/0/26,Gi1/0/27,Gi1/0/28
*********
Vlan : 2
Nombre de ports total : 5
Nombre de ports connecté : 2
Nombre de ports nonconnectés : Gi1/0/10,Gi1/0/21
List de ports nonconnectés : Gi1/0/22,Gi1/0/23,Gi1/0/24
set fileID [open"display.txt"]set fileData [read$fileID]set fileLines [split$fileData"\n"]foreach line $fileLines{
# Ici traitement de la variable line qui contient le ligne}
j'aimerais assigner à une variable tcl les différentes valeurs d'un fichier .txt (il y a une valeur par ligne).
Dans mes recherches je suis tombé sur ce post, j'ai repris le code proposé mais n'arrive pas à mes fins.
Je ne parviens pas à assigner à chaque variable la valeurs de la ligne du fichier.
Les seuls résultats auxquels j'arrive sont soit la dernière valeur du fichier texte dans la ou les variables avec le code suivant :
tcl
set fileID [open"config/confProg.txt"]set fileData [read$fileID]set fileLines [split$fileData"\n"]foreach line $fileLines{lappend nbVoiles $line
etc..
}
Soit en affichant directement fileLines ou fileData, j'ai toute les valeurs contenue dans le fichier (en ligne ou en colonne selon que je prend fileLine ou fileData)
Pourrait-on m'indiquer le moyen "d'isoler" chaque ligne du fichier .txt svp ?
En fait j'ai trouvé une autre solution, je récupère la valeur qui m'intéresse avec la fonction lindex
tcl
set ::nbVoiles[lindex$fileLines0]
Mais dans le cadre de la structure que tu proposes, je vois pas trop comment faudrait faire (c'est pas pure curiosité la vu que j'ai résolu mon pb), peut-être quelque chose comme :
tcl
if$line == i set nbVoiles $line
dans la boucle foreach ? (ou i est la ligne qui m'intéresse)
En effet, c'est une idée. Mais utiliser lindex est la meilleure solution, puisqu'elle t'évite de parcourir toute la liste. Je n'avais pas compris que tu ne voulais lire qu'une seule ligne. T'as trouvé la solution tout seul!
Afin d'éviter tout problème, je t'invite à prendre une bonne habitude qui consiste à vérifier que la ligne numero X existe bien:
tcl
if{[llength$filesLines]< X}{
putlog "Error: WTF! Impossible de récupérer la ligne X puisque le fichier ne contient pas X lignes !"return}
Euh non en fait je lis chaque ligne, donc je répète 8 fois la commande lindex avec une valeur différente à chaque fois (mon fichier texte comporte 8 valeurs) que j'assigne à une variable différente à chaque fois.
Merci pour le conseil pour la vérification de la "taille" du fichier lu.