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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#1

Message 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,
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#2

Message 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
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#3

Message 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 !!
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#4

Message 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)
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#5

Message 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.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#6

Message 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)
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#7

Message 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 ?
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

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

#8

Message 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
 
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#9

Message 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 ;)
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#10

Message 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
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#11

Message par Doccc »

D'accord, merci de te penché sur mon cas, et je voulais savoir pour le while, il manque pas un eof = true ?
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#12

Message 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
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#13

Message 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 :)
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

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

#14

Message 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")
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#15

Message 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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#16

Message 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 !!
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#17

Message par Yogui »

Problème de version Autoit ?
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#18

Message 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 !
Doccc
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 02 sept. 2008 16:22
Status : Hors ligne

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

#19

Message 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.
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

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

#20

Message 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)
Répondre