[R] Extraire 3 informations d'un txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

[R] Extraire 3 informations d'un txt

#1

Message par Laddy »

Bonjour
je cherche à extraire 3 informations différentes d'un fichier txt.

J'ai trouvé ce code de base dans un autre sujet que j'essaie d'adapter

Code : Tout sélectionner

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

While 1
    $chars = FileReadLine($file)
    If @error Then ExitLoop
        If StringInStr($chars,"UUID",1) Then
            $chars = stringsplit($chars,":")
            $chars = $chars[2]
            MsgBox(0, "Char read:", $chars)
        EndIf
        If StringInStr($chars,"Accessible",1) Then

            $chars = stringsplit($chars,":")
            $chars = $chars[2]
            MsgBox(0, "Char read:", $chars)
        EndIf
If StringInStr($chars,"Logical size",1) Then
            $chars = stringsplit($chars,":")
            $chars = $chars[2]
            MsgBox(0, "Char read:", $chars)
        EndIf
Wend

FileClose($file)
 
Le code me liste aussi cette ligne :
In use by VMs: XNGDOWS (UUID: ae7f4d38-bd27-4bf4-828f-b048a8a556a4)
comment la supprimer la supprimer du résultat ?

Et comment séparer chaque information pour afficher le résultat dans 3 inputbox ?
Sun VirtualBox Command Line Management Interface Version 3.1.6
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

UUID: 1182fa1e-c74c-45d0-97a5-7ab6b3a65946
Accessible: yes
Description:
Logical size: 10240 MBytes
Current size on disk: 6714 MBytes
Type: normal (base)
Storage format: VDI
In use by VMs: WINDOWS (UUID: ae7f4d38-bd27-4bf4-828f-b048a8a556a4)
Modifié en dernier par Laddy le mer. 15 déc. 2010 15:36, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#2

Message par Tlem »

Pourquoi faire compliqué ?

Code : Tout sélectionner

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

Global $String1, $String2, $String3
While 1
    $Line = FileReadLine($file)
    If @error Then ExitLoop
    If StringLeft($Line, 5) = "UUID:" Then $String1 = $Line
    If StringLeft($Line, 11) = "Accessible:" Then $String2 = $Line
    If StringLeft($Line, 13) = "Logical size:" Then $String3 = $Line
WEnd
FileClose ($file)

MsgBox(0, '', 'Voici les information recherchées :' & @CRLF & @CRLF & _
        $String1 & @CRLF & _
        $String2 & @CRLF & _
        $String3)
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é".
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#3

Message par Laddy »

Merci Tlem
pourquoi faire compliquer ?
parce que je veux uniquement la partie après les : ?
et ton code me donne les 3 lignes entières.

Je suppose que je dois encore traiter les informations avec un String quelquechose.

Edit :

Code : Tout sélectionner

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

Global $String1, $String2, $String3
While 1
    $Line = FileReadLine($file)
    If @error Then ExitLoop
    If StringLeft($Line, 5) = "UUID:" Then
    $String1 = stringsplit($Line,":")
    $String1 = $String1[2]
    EndIf
    If StringLeft($Line, 11) = "Accessible:" Then
    $String2 = stringsplit($Line,":")
    $String2 = $String2[2]
    EndIf
    If StringLeft($Line, 13) = "Logical size:" Then
    $String3 = stringsplit($Line,":")
    $String3 = $String3[2]
EndIf

WEnd
FileClose ($file)

MsgBox(0, '', 'Voici les information recherchées :' & @CRLF & @CRLF & _
        $String1 & @CRLF & _
        $String2 & @CRLF & _
        $String3)
 
Modifié en dernier par Laddy le mer. 15 déc. 2010 15:32, modifié 1 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#4

Message par zeshrek »

Il suffit juste de remplacer les 3 dernieres lignes de son code par :

Code : Tout sélectionner

        StringTrimLeft($String1,5) & @CRLF & _
        StringTrimLeft($String2,11) & @CRLF & _
        StringTrimLeft($String3,13))
pour 'couper' la partie gauche des chaines jusqu'aux guillemets (vu qu'on a le nombre de caracteres recherchés qq lignes plus haut pour identifier els chaines)


Edit:
Quoi que ca serait plus logique de modifier plutot les lignes précédentes, ou se fait la recherche, et de laisser les 3 dernieres telles quelles :

Code : Tout sélectionner

    If StringLeft($Line, 5) = "UUID:" Then $String1 = StringTrimLeft($Line,5)
    If StringLeft($Line, 11) = "Accessible:" Then $String2 = StringTrimLeft($Line,11)
    If StringLeft($Line, 13) = "Logical size:" Then $String3 = StringTrimLeft($Line13)
Modifié en dernier par zeshrek le mer. 15 déc. 2010 15:35, modifié 1 fois.
Si vis pacem para bellum
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#5

Message par ani »

hello,
normal qu'il renvoie la ligne complete
Rajoute un StringReplace(chaine,mot a remplacer,par ce mot)

je met pas le code complet juste les lignes à changer.

Code : Tout sélectionner

If StringLeft($Line, 5) = "UUID:" Then $String1 = StringReplace($Line,"UUID:","")
If StringLeft($Line, 11) = "Accessible:" Then $String2 = StringReplace($Line,"Accessible:","") 
If StringLeft($Line, 13) = "Logical size:" Then $String3 = StringReplace($Line,"Logical size:","")
bonne continuation.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#6

Message par Laddy »

Ok je commence à comprendre.

Code : Tout sélectionner

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

Global $String1, $String2, $String3
While 1
    $Line = FileReadLine($file)
    If @error Then ExitLoop
    If StringLeft($Line, 5) = "UUID:" Then $String1 = $Line
    If StringLeft($Line, 11) = "Accessible:" Then $String2 = $Line
    If StringLeft($Line, 13) = "Logical size:" Then $String3 = $Line
WEnd
FileClose ($file)

MsgBox(0, '', 'Voici les information recherchées :' & @CRLF & @CRLF & _
       StringTrimLeft($String1,5) & @CRLF & _
        StringTrimLeft($String2,11) & @CRLF & _
        StringTrimLeft($String3,13))
 
Zut Ani je viens juste de voir ta réponse, je regarde de suite
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#7

Message par Laddy »

C'est parfait merci à tous 3 pour votre aide. Ce n'est pas évident pour moi.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Extraire 3 informations d'un txt

#8

Message par Tlem »

Ce que dit zeshrek n'est pas faut, mais dans ce cas je préfèrerais ceci :

Code : Tout sélectionner

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

Global $String1, $String2, $String3
While 1
    $Line = FileReadLine($file)
    If @error Then ExitLoop
    If StringLeft($Line, 5) = "UUID:" Then $String1 = StringTrimLeft($Line,5)
    If StringLeft($Line, 11) = "Accessible:" Then $String2 = StringTrimLeft($Line,11)
    If StringLeft($Line, 13) = "Logical size:" Then $String3 = StringTrimLeft($Line,13)
WEnd
FileClose ($file)

MsgBox(0, '', 'Voici les information recherchées :' & @CRLF & @CRLF & _
        $String1 & @CRLF & _
        $String2 & @CRLF & _
        $String3)
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é".
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#9

Message par zeshrek »

Erf Tlem, ton msg a croisé mon édit :P
Les grands esprits... tout ca... :D
Si vis pacem para bellum
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#10

Message par ani »

heu pkoi ?

Moi je changerai directement le StringLeft par StringTrimLeft ?
Stringleft lit les x caractère de la chaine en partant de la gauche
StringTrimLeft lit la chaine en partant du Xième caractère en partant de la gauche

ex: stringleft("ani a toujours tord",3) => renvoie ani
ex: stringTrimLeft("ani a toujours tord",3) => renvoie a toujours tord

Code : Tout sélectionner

If StringTrimLeft($Line, 5) = "UUID:" Then $String1 = $Line
If StringTrimLeft($Line, 11) = "Accessible:" Then $String2 = $Line
If StringTrimLeft($Line, 13) = "Logical size:" Then $String3 = $Line
la fatigue syrement :p

bonne continuation ;)
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#11

Message par Laddy »

Merci encore :D

voila ce que ça donne :

Image

Me manquerait plus qu'une fonction pour calculer les Mo en Go pour faire plus beau lol
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#12

Message par ani »

ok ;)

un petit bout de code maison ;)

Code : Tout sélectionner

Func ReadBytes($iBytes)
  ;Cette fonction convertie une valeur en bytes
  ;Ex: 87298213 retournera 83.25 MB
  ;Information = http://fr.wikipedia.org/wiki/Bit
  If $iBytes <= 1023 Then
    $Read = $iBytes & " B" ;Bytes
  ElseIf $iBytes <= (1024 ^ 2) And $iBytes >= 1024 Then
    $Read = Round($iBytes / 1024, 2) & " KB" ;Kilobytes
  ElseIf $iBytes <= (1024 ^ 3) And $iBytes >= (1024 ^ 2) Then
    $Read = Round($iBytes / (1024 ^ 2), 2) & " MB" ;Megabytes
  ElseIf $iBytes <= (1024 ^ 4) And $iBytes >= (1024 ^ 3) Then
    $Read = Round($iBytes / (1024 ^ 3), 2) & " GB" ;Gigabytes
  ElseIf $iBytes <= (1024 ^ 5) And $iBytes >= (1024 ^ 4) Then
    $Read = Round($iBytes / (1024 ^ 4), 2) & " TB" ;Terabytes
  ElseIf $iBytes <= (1024 ^ 6) And $iBytes >= (1024 ^ 5) Then
    $Read = Round($iBytes / (1024 ^ 5), 2) & " PB" ;Petabytes
  ElseIf $iBytes <= (1024 ^ 7) And $iBytes >= (1024 ^ 6) Then
    $Read = Round($iBytes / (1024 ^ 6), 2) & " EB" ;Exabytes
  ElseIf $iBytes <= (1024 ^ 8) And $iBytes >= (1024 ^ 7) Then
    $Read = Round($iBytes / (1024 ^ 7), 2) & " ZB" ;Zettabytes
  ElseIf $iBytes <= (1024 ^ 9) And $iBytes >= (1024 ^ 8) Then
    $Read = Round($iBytes / (1024 ^ 8), 2) & " YB" ;Yottabytes
  EndIf
  Return $Read
EndFunc
dans ton code enfin je sait pas lequel t'a choisi ^^'
en partant du code moi lol

Code : Tout sélectionner

$String3 = ReadBytes($Line)
voilàvoilà

ps:sinon ton probleme avec fileopendialog est reglé ?
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#13

Message par bloodwolff »

:roll:

Code : Tout sélectionner

Func Mo_To_Go($mo, $decimal = 3)
    Return Round($mo/1024, $decimal)
EndFunc
Compte skype : bloodwolfff
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#14

Message par Laddy »

Oh merci à tous deux :D j'etais partie dans la recherche.

bloodwolff > ça veut dire que tu réduis le code de Ani en 3 lignes ?

Edit
Ani >
j'ai utilisé ceci :

Code : Tout sélectionner

$file = FileOpen("InfoSourceVDI.txt", 0)
Global $String1, $String2, $String3
While 1
    $Line = FileReadLine($file)
    If @error Then ExitLoop
    If StringLeft($Line, 5) = "UUID:" Then $String1 = StringTrimLeft($Line,5)
    If StringLeft($Line, 11) = "Accessible:" Then $String2 = StringTrimLeft($Line,11)
    If StringLeft($Line, 13) = "Logical size:" Then $String3 = StringTrimLeft($Line,13)
WEnd
FileClose ($file)
GUICtrlSetData($UUID,$String1)
GUICtrlSetData($Valid,$String2)
GUICtrlSetData($SizeHD,$String3)
 
Non pour FileOpenDialog > le fichier est traité à l'endroit ou cela s'ouvre.
Même en mettant des guillements à l'un ou à l'autre le fichier ne veut pas se créer ou je veux.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#15

Message par bloodwolff »

Tente un

Code : Tout sélectionner

FileChangeDir ( "path" )
, car un fileopendialog() modifie le working dir

Une ligne aurait suffit mais je te l'ai entouré d'une fonction :lol: mais le code d'ani est plus complet quand même :oops:
Compte skype : bloodwolfff
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#16

Message par ani »

J'AVAIS PAS TOUT LU, se sont des octet et non des bytes, mouarf

la fonction de bloodwolf et mieux pour ton usage, vu que la conversion ce fait déjà sur le kiloOctet :p moi je part de la plus base des valeurs donc non fonctionnel dans ton cas :(

ok, pour le code mais teste http://www.autoitscript.fr/forum/viewto ... 297#p40297

çà retourne la même chose

bon je vais dl le programme VirtualBox.
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#17

Message par Laddy »

Bonjour

Ani j'ai testé ton code à la place de ce que j'avais mis et malheureusement mes champs restent vides.

Code : Tout sélectionner

$file = FileOpen("InfoSourceVDI.txt", 0)
Global $String1, $String2, $String3
While 1
    $Line = FileReadLine($file)
    If @error Then ExitLoop
    ;If StringLeft($Line, 5) = "UUID:" Then $String1 = StringTrimLeft($Line,5)
    ;If StringLeft($Line, 11) = "Accessible:" Then $String2 = StringTrimLeft($Line,11)
    ;If StringLeft($Line, 13) = "Logical size:" Then $String3 = StringTrimLeft($Line,13)
    If StringTrimLeft($Line, 5) = "UUID:" Then $String1 = $Line
    If StringTrimLeft($Line, 11) = "Accessible:" Then $String2 = $Line
    If StringTrimLeft($Line, 13) = "Logical size:" Then $String3 = $Line
WEnd
FileClose ($file)
GUICtrlSetData($UUID,$String1)
GUICtrlSetData($Valid,$String2)
GUICtrlSetData($SizeHD,Mo_To_Go($String3) &" Go")
 
bloodwolff > merci pour la fonction

Me reste à trouver comment afficher une couleur différente pour le champ accessibilité :D c'est un détail mais bon c'est comme ça que j'apprends le langage

Le plus dur reste à venir le clonage du vdi car là je me demande comment je vais gérer le pourcentage effectué de la commande :?
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#18

Message par bloodwolff »

Regarde du coté de

Code : Tout sélectionner

GUICtrlSetBkColor ( controlID, backgroundcolor )
 
Devancer par l'autre post ;@ Je devrais apprendre à lire !
Compte skype : bloodwolfff
Laddy
Niveau 7
Niveau 7
Messages : 321
Enregistré le : mer. 03 sept. 2008 07:34
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#19

Message par Laddy »

Bloodwolff > merci mais il s'agit de modifier la couleur du texte de l'input en fonction du résultat trouvé par $string2.

if $string2 = "yes" alors changer la couleur en vert
if $string2 = "no" alors changer la couleur en rouge
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [R] Extraire 3 informations d'un txt

#20

Message par zeshrek »

Cette question est traitée dans l'autre topic... (parceque bon, si on commence a se mélanger les questions et les réponses, on va finir par se faire engueuler par le Boss)
Si vis pacem para bellum
Répondre