Page 1 sur 1
[R] Trier un fichier ini avec des adresses IP
Posté : dim. 25 oct. 2009 11:44
par jl56
Bonjour à tous
Sur un réseau j'utilise un utilitaire netscan et j'exporte le résultat du scan dans un fichier csv
à partir de ce fichier je crée un fichier INI qui me sert pour faire un menu
le but est de pouvoir réaliser quelques actions habituel (ping , http pour parametrer un routeur ,imprimante, nas etc) et explorer les dossier partagés.
Mais au fil des scans ( selon la présence des éléments sur le réseau ) le menu n'est pas bien rangé dans l'ordre des adresses IP
J'aimerais savoir comment ranger ce fichier ini, sans compter que 192.168.0.90 doit passer avant 192.168.0.151
sur le forum anglais j'ai testé l'udf ini.au3 mais il ne fonctionne pas et il perd des données (sections et valeurs)
exemple de fichier ini
► Afficher le texte
[192.168.0.81]
Nom=
[192.168.0.100]
Nom= poste_jlr
dvdjlr (E) (writable)=dvdjlr (E)
data (F) (writable)= data (F)
Mindscape (writable)= Mindscape
G$ (writable)= G$
print$ (writable)= print$
drvpi (writable)= drvpi
disque g (writable)= disque g
C$ (writable)= C$
rete (writable)= rete
photo (writable)= photo
S$ (writable)= S$
E$ (writable)= E$
F$ (writable)= F$
ADMIN$ (writable)= ADMIN$
[192.168.0.150]
Nom= NOLWENN
[192.168.0.151]
Nom= TIFENN
[192.168.0.152]
Nom= MORGANE
morgane (writable)=morgane
D$ (password)= D$
C$ (password)= C$
ADMIN$ (password)= ADMIN$
IPC$= IPC$
[192.168.0.254]
Nom=
[192.168.0.24]
Nom= test tri 24
[192.168.0.90]
Nom= test tri 90
Mon script
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$ini = @WorkingDir & "\reseau.ini"
$var = IniReadSectionNames($ini)
If @error Then
MsgBox(4096, "", "Erreur il manque le fichier INI." & $ini)
Exit
EndIf
Dim $menuip[$var[0] + 1], $menuipping[$var[0] + 1], $menuiphttp[$var[0] + 1], $menuiphttp88[$var[0] + 1], $menuipexplorer[$var[0] + 1][1]
GUICreate("Menu ip", 300, 200)
$menureseau = GUICtrlCreateMenu("Rèseau IP")
For $i = 1 To $var[0]
$var2 = IniReadSection($ini, $var[$i])
If $var2[1][1] = "" Then
$menuip[$i] = GUICtrlCreateMenu($var[$i], $menureseau)
Else
$menuip[$i] = GUICtrlCreateMenu($var[$i] & " " & $var2[1][1], $menureseau)
EndIf
$menuipping[$i] = GUICtrlCreateMenuItem("Ping de " & $var[$i], $menuip[$i])
$menuiphttp[$i] = GUICtrlCreateMenuItem("http://" & $var[$i], $menuip[$i])
$menuiphttp88[$i] = GUICtrlCreateMenuItem("http://" & $var[$i] & ":88", $menuip[$i])
If $var2[0][0] > 1 Then
GUICtrlCreateMenuItem("", $menuip[$i])
If $var2[0][0] > UBound($menuipexplorer, 2) Then
ReDim $menuipexplorer[255][$var2[0][0] + 1]
EndIf
For $ii = 2 To $var2[0][0]
$menuipexplorer[$i][$ii] = GUICtrlCreateMenuItem("EXPLORER ---> " & $var2[$ii][0], $menuip[$i])
Next
EndIf
Next
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
Merci de vos suggestions
à bientot
JL56
Re: [..] Trier un fichier ini avec des adresses IP
Posté : dim. 25 oct. 2009 14:47
par Tlem
Pour votre cas qui est bien spécifique, j'utiliserais une boucle de lecture de 1 à 254.
Dans cette boucle, je lirais les sections [192.168.0.X] une par une dans l'ordre de la boucle.
Si la lecture (avec
IniReadSection() ) est positive, alors je re-crée au fur et à mesure un nouveau fichier .INI qui lui, sera dans l'ordre de la boucle.
Voilà, bon code.

Re: [..] Trier un fichier ini avec des adresses IP
Posté : dim. 25 oct. 2009 17:17
par jl56
Bonjour Tlem
Oui j'y avait pensé mais je cherchais quelque chose de plus universel et je ne voulais pas me limiter
à 255 valeurs ( classe c ). Ce qui est débile car lorsque le menu dépasse +/- 80 lignes ça n'a plus d'intérêt.
Du coup j'ai retroussé mes manches et j'ai réussi plus facilement que je l'avais pensé
j'ai ajouté une fonction tri() qui crée un autre fichier ini selon tes conseils
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
tri()
$ini = @WorkingDir & "\reseau.ini"
$var = IniReadSectionNames($ini)
If @error Then
MsgBox(4096, "", "Erreur il manque le fichier INI." & $ini)
Exit
EndIf
Dim $menuip[$var[0] + 1], $menuipping[$var[0] + 1], $menuiphttp[$var[0] + 1], $menuiphttp88[$var[0] + 1], $menuipexplorer[$var[0] + 1][1]
GUICreate("Menu ip", 300, 200)
$menureseau = GUICtrlCreateMenu("Rèseau IP")
For $i = 1 To $var[0]
$var2 = IniReadSection($ini, $var[$i])
If $var2[1][1] = "" Then
$menuip[$i] = GUICtrlCreateMenu($var[$i], $menureseau)
Else
$menuip[$i] = GUICtrlCreateMenu($var[$i] & " " & $var2[1][1], $menureseau)
EndIf
$menuipping[$i] = GUICtrlCreateMenuItem("Pingpi de " & $var[$i], $menuip[$i])
$menuiphttp[$i] = GUICtrlCreateMenuItem("http://" & $var[$i], $menuip[$i])
$menuiphttp88[$i] = GUICtrlCreateMenuItem("http://" & $var[$i] & ":88", $menuip[$i])
If $var2[0][0] > 1 Then
GUICtrlCreateMenuItem("", $menuip[$i])
If $var2[0][0] > UBound($menuipexplorer, 2) Then
ReDim $menuipexplorer[255][$var2[0][0] + 1]
EndIf
For $ii = 2 To $var2[0][0]
$menuipexplorer[$i][$ii] = GUICtrlCreateMenuItem("EXPLORER ---> " & $var2[$ii][0], $menuip[$i])
Next
EndIf
Next
GUISetState()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
Func tri()
If FileExists(@WorkingDir & "\trireseau.ini") Then
FileDelete(@WorkingDir & "\trireseau.ini")
EndIf
$ini = @WorkingDir & "\reseau.ini"
$var = IniReadSectionNames($ini)
If @error Then
MsgBox(4096, "", "Erreur il manque le fichier INI." & $ini)
Exit
EndIf
For $j = 1 To 255
For $i = 1 To $var[0]
$chaineip = $var[$i]
$finip = StringReplace($chaineip, StringRegExpReplace($chaineip, "[^/.]+\Z", ""), "")
If Number($finip) = $j Then
IniWriteSection(@WorkingDir & "\trireseau.ini", $var[$i], "")
$var2 = IniReadSection($ini, $var[$i])
For $ii = 1 To $var2[0][0]
IniWrite(@WorkingDir & "\trireseau.ini", $var[$i], $var2[$ii][0], $var2[$ii][1])
Next
EndIf
Next
Next
FileCopy(@WorkingDir & "\trireseau.ini", @WorkingDir & "\reseau.ini", 1)
EndFunc ;==>tri
Voila Merci
Je vous laisse le choix de conserver ce post ou pas
a+
JL56