Bonjour a tous,
je vous écris aujourd'hui pour un "petit" problème.
Je m'explique: j'essaie depuis quelque jours de créer un script qui récupérerait des données dans un fichier txt ( ici dans un fichier de conf de switch ou routeur) et les inséreraient dans un fichier excel ( dans différentes colonnes selon le type de données ).
J'avais bien avancé la dessus sauf que après avoir résolu les différents problèmes de variables, etc.. je me suis rendu compte a force de test que le script ne tournait pas du tout comme je pensais(hasard pour un débutant
).
Le principal problème étant que pour parcourir un fichier txt j'ai utilisé la classe TextStream avec la méthode .AtEndOfStream qui est censée parcourir l'ensemble du fichier txt ligne par ligne.
Sauf que lorsque j'ai crée mes "tests" (notamment celui qui m'affiche la ligne et le contenu de la ligne avec .ReadLine) j'ai constaté que le script ne parcourait pas ligne par ligne le fichier mais faisait des bond (ex: ligne 3 puis 7 puis 12, 13, etc) ainsi que le contenu de la ligne courante n'était pas complet.
J'ai crée aussi une série de boucle If qui aurait du me permettre de classé les données voulues par un test simple en utilisant .Read(n) mais autre chose que je ne comprend pas .. des fois la boucle est prise en compte des fois non alors que le fichier de conf est le même pour chaque interface ..
comme je l'ai dit étant débutant j'ai surement du faire une ( ou plusieurs :p ) erreur quelque part donc si quelqu'un pouvait m'aider a me faire comprendre ce que j'ai mal fait cela serait super sympa ^^ ( ou de me donner une alternative à TextStream pour parcourir un fichier)
PS: pourtant je pense bien savoir lire
Merci encore a tout ceux qui se pencheront sur mon problème ( je vous laisse le code ci dessous .. soyez indulgent j'ai surement des choses aberrantes pour certains :p )
Edit: en continuant mes test sur un autre script je viens de remarquer que lorsque l'action arrive sur "wscript.echo fTxtout.ReadLine" cela me sors bien la première ligne du txt ( la ligne courante ) et lorsque je commence la "Sub Copie" je refait un fTxtout.ReadLine() et là, la ligne qui est envoyé dans ma MsgBox est la ligne suivante ..donc la méthode .Readline fait un saut de ligne après avoir été exécutée .. affaire à suivre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 Option Explicit Dim pathout Dim objFso,objShell, objExcel Dim strcurrent Dim sCurPath,strCurTab,fTxtin,fTxtout,pathin,yligne Dim MessageToLog sCurPath = Replace(Wscript.ScriptFullName, Wscript.ScriptName, "") Public Const tagint = "interface" Public Const tagdesc = "description" Public Const tagvlan = " switchport access" Public Const tagmac = " switchport port-security mac-address sticky" Public Const R_ONLY = 1 Public Const EVENT_SUCCESS = 0 Public Const EVENT_ERROR = 1 Public Const EVENT_WARNING = 2 pathin = sCurPath & "test.xls" Set objShell = Wscript.CreateObject("Wscript.Shell") InitPath () ' ------------------------------------- ' Ouverture du Fichier destination ' ------------------------------------- Set objFso = CreateObject ("scripting.filesystemobject") Set objExcel=CreateObject("Excel.Application") If Not (objFso.FileExists(pathin)) Then MessageToLog = "Fichier destination pour copie : " & "Le fichier n'existe pas !" objShell.LogEvent EVENT_ERROR, MessageToLog objFso = Nothing Wscript.Quit End If Set fTxtin = objExcel.workbooks.open(pathin) objExcel.visible=true msgbox(pathout) ' ------------------------------------- ' Ouverture du Fichier source ' ------------------------------------- Set objFso = CreateObject ("scripting.filesystemobject") If Not (objFso.FileExists(pathout)) Then MessageToLog = "Fichier source pour copie : " & "Le fichier n'existe pas !" objShell.LogEvent EVENT_ERROR, MessageToLog ' objFso = Nothing Wscript.Quit End If Set fTxtout = objFso.OpenTextFile(pathout,R_ONLY) call RecupVal '################################################ Sub RecupVal msgbox("coucou") fTxtin.worksheets(1).cells(1,1)=tagint fTxtin.worksheets(1).cells(1,2)=tagdesc fTxtin.worksheets(1).cells(1,3)="Vlan" fTxtin.worksheets(1).cells(1,4)="ADD MAC" dim curr While Not fTxtout.AtEndOfStream yligne=2 curr=fTxtout.Line wscript.echo fTxtout.ReadLine msgbox("ligne courante: " & curr) If fTxtout.Read(10)=tagint then msgbox("test1") Call Copie (yligne,1,0) msgbox("test2") End If If fTxtout.Read(12)=tagdesc then MsgBox("test3") Call Copie(yligne,2,0) End If If fTxtout.Read(18)=tagvlan then MsgBox("copie4") Call Copie(yligne,3,2) End If If fTxtout.Read(44)=tagmac then MsgBox("test5") fTxtout.Skip(1) Msgbox("test6") Call Copie(yligne,4,1) End If msgbox("fin boucle") yligne=yligne + 1 Wend msgbox("fin") fTxtin.Close() fTxtout.Close() End sub '################################################ '################################################ Sub InitPath () pathout = inputbox ("chemin du fichier voulu","Chemin de conf EAR") End Sub '################################################ Sub Copie (yligne,xcell,nTab) msgbox("place du tableau" & nTab) strcurrent = fTxtout.ReadLine() msgbox("dans strcurrent;" & strcurrent) strCurTab = Split(strcurrent, " ") msgbox("dans le tableau" & strCurTab(nTab)) fTxtin.worksheets(1).Cells(yligne,xcell)=strCurTab(nTab) End Submais je suis toujours preneur de remarque sur tout et n'importe quoi sur mon code
Edit 2: j'ai fais quelques modifications et autres tests.. déja j'ai viré l'init de yligne dans la boucle ( oui pas très malin ..
) et sinon en travaillant sur mon 2 eme script et en le poussant un peu plus j'ai remarqué que ça fonctionnait comme il fallait :j'avais crée un fichier texte avec des nom et prénom une ligne sur deux et le script les récupérait bien et les mettaient dans la bonne colonne.
Par contre lorsque j'ai voulu tester en mettant des lignes vides ou des "!" ( comme des les conf cisco) entre chaque nom j'ai retrouvé mon problème de bonds aléatoire.. donc en fait maintenant il faudrait que je trouve un moyen de gérer ces exceptions afin que mon fichier soit lu normalement .
Partager