Page 1 sur 2

[..] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 11:42
par Doccc
Bonjour,
Grâce à un batch, j'ai récupérer dans un fichier texte la commande ping -a :

Code : Tout sélectionner

Envoi d'une requˆte 'ping' sur serv147.omf.local [172.23.4.2] avec 32 octets de donn‚esÿ:
Envoi d'une requˆte 'ping' sur uc1152.omf.local [172.23.4.3] avec 32 octets de donn‚esÿ:
Envoi d'une requˆte 'ping' sur uc1142.omf.local [172.23.4.3] avec 32 octets de donn‚esÿ:
Envoi d'une requˆte 'ping' sur serv1142.omf.local [172.23.4.3] avec 32 octets de donn‚esÿ:
[...]
Et je voudrais savoir si c'était possible de récupérer dans un fichier texte ceci :

Code : Tout sélectionner

uc1152.omf.local
uc1142.omf.local
Et dans un autre fichier texte ceci :

Code : Tout sélectionner

serv147.omf.local
serv1142.omf.local
Merci d'avance pour vos réponses,

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 14:01
par Yogui
avec la commande StringSplit c'est possible de "spliter" (découper) une chaine dans un tableau;

Pour lire le fichier "source" utiliser la fonction : FileReadLine explication en suivant le lien

puis à la place de MsgBox(0, "Line read:", $line) mettre le code suivant :

Code : Tout sélectionner

;découper la ligne en lecture avec comme séparateur : " " (espace)
$split = StringSplit($line," ")
; MsgBox(0,"",$split[6])

; je vérifie dans quel cas je suis 
$var = Stringleft($split[6], 2)
if $var = "uc" Then
FileWrite("c:\fichier2.txt", $split[6] &@CRLF)   
Else
FileWrite("c:\fichier1.txt", $split[6] &@CRLF)  
EndIf
Voilà en tout cas comment je ferai

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 14:15
par Doccc
Merci pour cette réponse, ton code marche sans soucy.
Maintenant il faut que je trouve pour lui dire d'aller chercher dans le fichier texte et non lui donner une valeur manuellement !!

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 14:32
par Yogui
Avez vous suivie le lien suivant : ?

http://www.autoitscript.com/autoit3/doc ... adLine.htm

edit

(c'est certainement de ma faute j'ai édité ma première réponse que je trouvai incomplète)

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 15:34
par Doccc
Il faut en fait faire un compteur a chaque fois il incrémente mais si on sait pas le nombre de ligne à l'avance ??

$compteur=1
$string=FileReadLine ( P:\applications\ListeIP.txt [, 1])
$compteur +1

Je vois pas trop comment tourner ma boucle en fait.

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 15:37
par Yogui
le compteur est déjà dans le while1
qui est en fait une boucle infinie mais la ligne :

If @error = -1 Then ExitLoop

te fait sortir de la boucle

Code : Tout sélectionner

$file = FileOpen("test.txt", 0)

; Check if file opened for reading OK
If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

; Read in lines of text until the EOF is reached
While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    

$split = StringSplit($line," ")
MsgBox(0,"",$split[6])

$var = Stringleft($split[6], 2)

if $var = "uc" Then
    
FileWrite("c:\fichier2.txt", $split[6] &@CRLF)   

Else

FileWrite("c:\fichier1.txt", $split[6] &@CRLF)  

EndIf
    

Wend

FileClose($file)

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 16:08
par Doccc
Je t'embéte encore :P
Merci beaucoup déjà !

Aparament il boucle une premiere fois et aprés j'ai une erreur :

Code : Tout sélectionner

$var = Stringleft($split[6], 2)
$var = Stringleft(^ ERROR
 
Tu sais d'ou sa peut venir ?

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 16:32
par jbnh

Code : Tout sélectionner

#include <string.au3>

;------------------------------------------------
$filename = 'test.txt'
;------------------------------------------------

$file = FileOpen($filename, 0)
$read = FileRead($file)
$line = StringSplit($read, @CR)

For $i = 1 To $line[0]

$var = FileReadLine($file, $i)
$newline = _StringBetween($var, "ing' sur ", "[172.2")

If IsArray ($newline) Then
$result = StringLeft($newline[0], 4)

    If $result = "serv" Then 
    FileWrite("fichier1.txt", $newline[0]&@CRLF)
    Else
    FileWrite("fichier2.txt", $newline[0]&@CRLF)
    Endif

Else
    MsgBox(16,"","Aucune chaîne trouvée")
EndIf


Next
 

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 16:50
par Doccc
J'ai un peu plus de mal à comprendre ton code, si tu pouvais m'éclaircir ...
Mon fichier d'origine n'est plus aussi simple enfait :

Code : Tout sélectionner

Envoi d'une requˆte 'ping' sur serv147.omf.local [172.23.4.2] avec 32 octets de donn‚esÿ:
R‚ponse de 172.23.4.2ÿ: octets=32 temps<1ms TTL=64
Statistiques Ping pour 172.23.4.2:
   Paquetsÿ: envoy‚s = 1, re‡us = 1, perdus = 0 (perte 0%),
Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
Envoi d'une requˆte 'ping' sur uc1152.omf.local [172.23.5.2] avec 32 octets de donn‚esÿ:
R‚ponse de 172.23.5.2ÿ: octets=32 temps<1ms TTL=64
Statistiques Ping pour 172.23.5.2:
    Paquetsÿ: envoy‚s = 1, re‡us = 1, perdus = 0 (perte 0%),
Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
Envoi d'une requˆte 'ping' sur uc1600.omf.local [172.23.6.1] avec 32 octets de donn‚esÿ:
R‚ponse de 172.23.6.1ÿ: octets=32 temps<1ms TTL=128
Statistiques Ping pour 172.23.6.1:
    Paquetsÿ: envoy‚s = 1, re‡us = 1, perdus = 0 (perte 0%),
Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
Envoi d'une requˆte 'ping' sur template [172.23.4.2] avec 32 octets de donn‚esÿ:
R‚ponse de 172.23.4.2ÿ: octets=32 temps<1ms TTL=128
Statistiques Ping pour 172.23.4.2:
    Paquetsÿ: envoy‚s = 1, re‡us = 1, perdus = 0 (perte 0%),
Dur‚e approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms
 
Je ne pense pas que sa change grand chose sauf que, dans un fichier on veut les serv, dans un autre les uc et le reste on y veut pas !

Merci ;)

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 18:08
par Yogui
Doccc a écrit :Je t'embéte encore :P
Merci beaucoup déjà !

Aparament il boucle une premiere fois et aprés j'ai une erreur :

Code : Tout sélectionner

$var = Stringleft($split[6], 2)
$var = Stringleft(^ ERROR
 
Tu sais d'ou sa peut venir ?

oui de cette ligne

Statistiques Ping pour 172.23.4.2:

qui n'a pas 6 éléments ... si pas de solution ce soir je regarderai à nouveau

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 18:31
par Doccc
D'accord, merci de te penché sur mon cas, et je voulais savoir pour le while, il manque pas un eof = true ?

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 21:26
par Yogui
il me semble que maintenant ça fonctionne :)

Code : Tout sélectionner

#include <file.au3>
#Include <Array.au3> 
 ;-------------------------------------------


Dim $recherche = "Envoi d'une requˆte"
$filename = 'c:\files.txt'
$filename2 = 'c:\serv.txt'
$filename3 = 'c:\uc.txt'
dim $Separator= " "
Dim $array
dim $res
;-------------------------------------------

;~ fichier journal dans un tableau 1 colonne
_FileReadToArray($filename, $array)
For $X = 1 to $array[0]
;~         si la recherche est dans la ligne X alors je split le fichier avec le caractère espace
    If StringInStr($array[$X], $recherche)  Then                 
                        $Res = StringSplit($array[$X], $Separator)   
                        
                        $var = Stringleft($Res[6], 2)
if $var = "uc" Then
    
FileWrite($filename3, $Res[6] &@CRLF)   

Elseif $var = "se" then

FileWrite($filename2, $Res[6] &@CRLF)  

Else
    msgbox(0,'Attention !!!', $Res[6]& " on y veut pas !")
EndIf

EndIf
Next

j'espère que ça va aller maintenant

Re: [...] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 21:32
par Yogui
Doccc a écrit :D'accord, merci de te penché sur mon cas, et je voulais savoir pour le while, il manque pas un eof = true ?
je met le code ici:

While 1 (ce while n'a pas de fin car pas de condition de sortie pas d'explication c'est juste comme ça :D )
$line = FileReadLine($file) (je charge la ligne du fichier à traiter FileReadLine prend toutes les ligne les une après les autres)
If @error = -1 Then ExitLoop (Si @error alors je sort de mon while c'est ici que tu as une sorte de EOF la fonction FileReadLine renvoie @error = -1 si la dernière ligne du fichier est passée)

WEnd


pour faire plus simple lorsque tu arrives à la fin du fichier la variable @error passe à -1 :)

Re: [..] Extraction et tri d'une chaine de caractére

Posté : mer. 03 sept. 2008 22:58
par jbnh
Em, je vois pas le problème avec mon script. Si tu veux pas le message d'erreur enlève la ligne: MsgBox(16,"","Aucune chaîne trouvée")

Re: [..] Extraction et tri d'une chaine de caractére

Posté : jeu. 04 sept. 2008 02:42
par Tlem
Bonsoir.

Est-ce que ceci vous convient ?

Code : Tout sélectionner

;------------------------------------------------
; Declaration des variables.
$Src = 'Test.txt'
$DstServ = "Serveur.txt"
$DstUC = "UC.txt"
;------------------------------------------------

; Lecture du fichier dans la variable $hFile.
$hFile = FileRead($Src)
; Recherche de chaine avec StringRegExp
$aVar = StringRegExp($hFile, "'ping' sur ([A-Za-z0-9._%-]+)", 3)

; Ouverture des fichiers de destination pour écriture.
$Serv = FileOpen($DstServ, 1)
$UC = FileOpen($DstUC, 1)

; Boucle de lecture du tableau résultant et répartition dans les fichiers.
For $i = 0 to UBound($aVar)-1
    If StringLower(StringLeft($aVar[$i],4)) = "serv"  Then FileWrite($Serv, $aVar[$i] & @CRLF)
    If StringLower(StringLeft($aVar[$i],2)) = "uc"  Then FileWrite($UC, $aVar[$i] & @CRLF)
Next

; Fermeture des fichiers.
FileClose($Serv)
FileClose($UC)

Re: [..] Extraction et tri d'une chaine de caractére

Posté : jeu. 04 sept. 2008 08:54
par Doccc
Yogui, j'ai toujours un probléme avec ton code :

Code : Tout sélectionner

C:\Program Files\AutoIt3\Examples\test3.au3 (17) : ==> Subscript used with non-Array variable.:
For $X = 1 to $array[0]
For $X = 1 to $array^ ERROR
 
Je vais me pencher là dessus et merci pour l'explication !
Jbnh, je vais faire des test avec ton script, pour voir d'ou sa vient.
Tlem, merci beaucoup, sa marche niquel !

Que de réponse, en si peut de temp sa fait plaisir, Merci !!

Re: [..] Extraction et tri d'une chaine de caractére

Posté : jeu. 04 sept. 2008 09:32
par Yogui
Problème de version Autoit ?

Re: [..] Extraction et tri d'une chaine de caractére

Posté : jeu. 04 sept. 2008 10:06
par Doccc
J'ai la version SciTE4AutoIt3 Version 1.76 .

Je suis entrain de regarder pour continuer le script la, pour par exemple me connecter en telnet à toute les ips contenu dans serveur et effectuer des commandes !

Re: [..] Extraction et tri d'une chaine de caractére

Posté : jeu. 04 sept. 2008 14:07
par Doccc

Code : Tout sélectionner

;------------------------------------------------
; Declaration des variables.
$DstServ = "P:\applications\serveur.txt"
;------------------------------------------------

; Lecture du fichier dans la variable $hFile.
$hFile = FileRead($DstServ)


; Boucle de lecture du tableau résultant
For $i = 0 to UBound($aVar)-1
Run ("cmd.exe") 
WinWaitActive("C:\WINDOWS\system32\cmd.exe")
Send ("telnet{SPACE}$hFile{ENTER}")

Next
 
En reprenant votre code, faut que j'aprofondisse.

Re: [..] Extraction et tri d'une chaine de caractére

Posté : jeu. 04 sept. 2008 16:03
par Yogui
pour le telnet je ferai plutôt :

Code : Tout sélectionner

Global $iPID = Run(@ComSpec & " /c telnet " & $hFile)
en mode invisible

Code : Tout sélectionner

Global $iPID = Run(@ComSpec & " /c telnet " & $hFile, @SW_HIDE)