[...] Copie: écraser le plus lourd; modifier *.txt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

[...] Copie: écraser le plus lourd; modifier *.txt

#1

Message par Aquhydro »

Bonjour, j'aurais besoin de deux petits script qui ne doivent pas être aussi complexe que ceux que j'ai demandé jusqu'a présent, le premier permettrait de, lors d'une copie avec écrasement de fichier, choisir automatiquement le fichier le plus lourds pour écraser l'autre.
Du style si je copie dans Mes Documents 1.txt et qu'il y avait déjà 1.txt, et bien si ils font tout deux 1ko, s'en fout on copie pas, si y'en a un qui fait 1 et l'autre qui fait 2ko, et bien on concerve celui qui en fait 2.


Le second script qu'il me faudrait servirais à changer un fichier de ce type :
1.txt
(698 Octets) Téléchargé 83 fois
En fichier (avec le même nom, ici je l'ai modifié pour la lisibilité) comme cela :
2.txt
(129 Octets) Téléchargé 70 fois
Les données y ont juste étés déplacées. Si il est possible accessoirement de supprimer l'écriture scientifique (type 1.980E+03 par une écriture classique type : 0.00198 ça serait parfait, mais sinon, ça serait déjà très bien. ) La première ligne de chiffre sera systématiquement 0 ainsi que le premier chiffre de la seconde.


Merci
Aquhydro
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#2

Message par mikell »

Code : Tout sélectionner

$source = @scriptdir & "\1.txt"
$dest = @MyDocumentsDir & "\1.txt"
If FileGetSize($source) > FileGetSize($dest) Then FileCopy ( $source, $dest, 1)
Heu tu sais, si tu dois te mettre à utiliser autoit, faudrait potasser un peu le fichier d'aide et les tutoriels parce que ce code-là est *hyper* basique
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#3

Message par Aquhydro »

Non, tu dois avoir mal compris, là j'ai deux codes, oui, certes, le premier est basique, mais le second est une remise en forme complète, c'est à dire que j'ai 700 fichier *.txt nommés 1.txt, 2.txt, 3.txt, et que je veux qu'ils aient après le même noms, mais je veux qu'ils ne soient plus comme ça :
► Afficher le texte
mais comme ceci :
► Afficher le texte
Sachant que ce qui est souligné doit etre fixe dans les nouveau fichiers, ce qui est en italique est vient du fichier originel, et le 0 et le 4 je les rajouterais après.
Alors j'ai trouvé une moitié de solution : Je crée d'avance 700 fichier txt identiques numérotés de 1 à 700, qui s'appellerais 1 (1).txt jusqu'a 1 (700).txt, avec déjà la partie fixe, il faut juste que j'aprenne à copier automatiquement pour le 1.txt le 8.053E+2, si je pouvais le passer en écriture classique ça sera passer, et le coller au bon endroit dans le fichier 1 (1).txt. Ensuite, que ça me fasse la même opération avec le 2.txt et le 1 (2).txt, etc...
Modifié en dernier par Aquhydro le ven. 31 août 2012 14:40, modifié 1 fois.
Glouglou.
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#4

Message par PandiPanda »

Pour la "Notation scientifique" j'ai bricoler quelque chose comme ceci;
► Afficher le textela fonction
► Afficher le texteexemple de code
Modifié en dernier par PandiPanda le jeu. 30 août 2012 16:53, modifié 1 fois.
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#5

Message par mikell »

@Panda
Tu pourrais faire beaucoup plus court en utilisant StringFormat

Code : Tout sélectionner

$n = "9.6646E-02"
msgbox(0,"", StringFormat ('%f', $n) )
Sinon avec l'exemple du début :
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#6

Message par PandiPanda »

Le probleme avec StringFormat() est que ca fait un arrondissement "implicite"
par exemple ceci;

Code : Tout sélectionner

MsgBox(0,"",StringFormat("%f","5.85E-07"))
; reponse attendue : 5.85E-07|0.000000585
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#7

Message par mikell »

OK mais c'est juste des paramètres à ajuster ça

Code : Tout sélectionner

MsgBox(0,"",StringFormat("%.09f","5.85E-07"))
; reponse attendue : 5.85E-07|0.000000585
Pour le faire bien propre, l'idéal serait de paramétrer en utilisant le nombre de décimales et l'exposant :wink:

Code : Tout sélectionner

$n = "5.85E-07"
$ecart = StringLen(StringRegExpReplace($n, '.*\.(.*?)E.*', "$1") )
If StringInStr($n, "-") Then 
    $dec = StringRight($n, 2)+$ecart
Else
    $dec = 2
EndIf
MsgBox(0,"",StringFormat("%." & $dec & "f", $n))
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#8

Message par Aquhydro »

Alors pour l'arrondissement implicite, ça me gêne pas vraiment à vrai dire, par contre, le code que tu as fait va t'il fonctionner aussi pour 2.txt => 2.txt,
3.txt=> etc...
Ou seulement pour 1?
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...]Copie: écraser le plus lourd; modifier *.txt

#9

Message par mikell »

Si tous les fichiers ont la même structure, ça doit marcher pour tous
Mon script est juste un test mais tu peux faire une boucle For sur le n° des fichiers en lecture et en écriture : 1.txt, 2.txt, 3.txt, etc et test1.txt, test2.txt, etc (par exemple)
Il faut juste faire attention aux possibilités de forme des nombres à récupérer (nombre de chiffres en décimal, etc) et si nécessaire ajuster le regexp en conséquence, là il relève les nombres de la forme x.xxxE+xx ou x.xxxE-xx , avec 3 ou 4 décimales

Pour l'arrondissement le Panda a raison, StringFormat sans paramètres ça arrondit sévère, vaut mieux utiliser mon script corrigé
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Copie: écraser le plus lourd; modifier *.txt

#10

Message par Aquhydro »

Si j'ai bien compris mon code doit être le suivant :

Code : Tout sélectionner

[spoiler=]$n = 1

While 1
$1 = "Temps" &@TAB& "Avg" &@TAB& "Moy" &@TAB& "kx" &@TAB& "ky" &@TAB& "Plante"
$2 = "Years" &@TAB& "m" &@TAB& &@SPACE& &@TAB& "md" &@TAB& "md" &@TAB&  &@SPACE&
$3 = "0" &@TAB& "0" &@TAB& "0" &@TAB& "0" &@TAB& "0" &@TAB& "0" 
$4= "0" &@TAB& 
Sleep(500)

$file = FileOpen($n & ".txt", 0)
Sleep(500)

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    If StringInStr($line, "aperture") OR _    ; Tout ça je comprend pas, ce que je voudrais c'est juste que après mon dernier" &@TAB& " sur la ligne 4 il aille copier ce qui était après : " The AVG aperture is " donc : un chiffre au format x.xxxE+ou-xx, qu'après ça rajoute un tab et un espace, un second tab, puis ce qui est écris après :  "kx=" soit un chiffre au format x.xxxE+ou-xx, et ce qu'il y a après "ky=" soit un chiffre au même format. en passant de la forme scientifique à normale, et là non plus je n'en ai pas compris le fonctionnement. Serait il possible de me montrer comment l'intégrer à mon script final? 
        StringInStr($line, "cell perm") OR _ 
        StringLeft($line, 3)=" kx" OR _ 
        StringLeft($line, 3)=" ky" Then $4 &= _zeregexp($line)
Wend
FileClose($file)
FileWrite(@scriptdir & "\test.txt", $1 &@crlf& $2 &@crlf& $3 &@crlf& $4) ; Qu'est ce que fait cette ligne? Enregistre t'elle sous le nom test.txt? Si je veux l'entregistrer sous "*.txt" faut il seulement que je remplace "\test.txt" par "\$n.txt"? Et si je veux que ça l'enregistre dans le dossier nommé 1 à l'interieur du dossier ou est le script faut il mettre "\1\$n.txt"? 


Func _zeregexp($txt)
  Local $pattern = '(\d\.\d{3,4}E[\+\-]\d{2})'
  Return StringRegExpReplace($txt, '.+?'&$pattern& '.*', "$1") &@TAB ; Je ne comprend pas toutes ces dernières lignes
Sleep(500)
$n += 1 
Wend
EndFunc[/spoiler]


Merci de votre aide.
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Copie: écraser le plus lourd; modifier *.txt

#11

Message par mikell »

Pour passer de la forme scientifique à normale, on peut mettre ça dans une fonction
Admettons pour l'exemple que
- il y a 700 fichiers à traiter
- les fichiers sources s'appellent 1.txt, 2.txt, etc, et ont tous la même structure que le fichier "1.txt" de ton 1er post
- les fichiers destinations s'appelleront 1.txt, 2.txt, etc, et on les met dans un dossier nommé "test"
Le tri des différentes lignes à traiter se fait dans la condition "If String... etc"
Voilà ce que ça donnerait
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Copie: écraser le plus lourd; modifier *.txt

#12

Message par Aquhydro »

Code : Tout sélectionner

$2 = "Years" &@TAB& "m" &@TAB& &@SPACE& &@TAB& "md" &@TAB& "md" &@TAB&  &@SPACE&
$2^ 

Error in the expression.
Je rappelle que ce qui m'interessé était plus cette ligne de caractères que celle que tu a donné :
For $i = 1 to 700

Code : Tout sélectionner

$1 = "Temps" &@TAB& "Avg" &@TAB& "Moy" &@TAB& "kx" &@TAB& "ky" &@TAB& "Plante"
$2 = "Years" &@TAB& "m" &@TAB& &@SPACE& &@TAB& "md" &@TAB& "md" &@TAB&  &@SPACE&
$3 = "0" &@TAB& "0" &@TAB& "0" &@TAB& "0" &@TAB& "0" &@TAB& "0" 
$4= "0" &@TAB&
ça ne marche pas mieu avec {"SPACE"} ni avec {SPACE} Ou ça met
Unable To parse Line.
Modifié en dernier par Tlem le ven. 31 août 2012 18:31, modifié 1 fois.
Raison : Ajout balise de code
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Copie: écraser le plus lourd; modifier *.txt

#13

Message par mikell »

Tu prends de diaboliques libertés avec la syntaxe alors autoit n'est pas content :mrgreen:
Surtout avec les "&" et une macro @SPACE qui n'existe pas
La macro @TAB existe parce que sa traduction en écriture peut varier d'un pc à l'autre
Mais un espace ça reste tout bêtement " "

Code : Tout sélectionner

$2 = "Years" & @TAB & "m" & @TAB & " " & @TAB & "md" & @TAB & "md" & @TAB & " "
msgbox(0,"", $2)
"Glouglou." ça veut dire "je coule" ou alors "je bois une bière" ? :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Copie: écraser le plus lourd; modifier *.txt

#14

Message par Aquhydro »

Je dois avouer qu'actuellement je coule complètement...
Glouglou.
Répondre