[...] Copie: écraser le plus lourd; modifier *.txt
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
Aquhydro
- 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
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 : En fichier (avec le même nom, ici je l'ai modifié pour la lisibilité) comme cela : 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
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 : En fichier (avec le même nom, ici je l'ai modifié pour la lisibilité) comme cela : 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.
- mikell
- 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
Code : Tout sélectionner
$source = @scriptdir & "\1.txt"
$dest = @MyDocumentsDir & "\1.txt"
If FileGetSize($source) > FileGetSize($dest) Then FileCopy ( $source, $dest, 1)" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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
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 :
mais comme ceci :
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...
► Afficher le texte
► Afficher le texte
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.
- PandiPanda
- 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
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
- mikell
- 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
@Panda
Tu pourrais faire beaucoup plus court en utilisant StringFormat
Sinon avec l'exemple du début :
Tu pourrais faire beaucoup plus court en utilisant StringFormat
Code : Tout sélectionner
$n = "9.6646E-02"
msgbox(0,"", StringFormat ('%f', $n) )► 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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- PandiPanda
- 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
Le probleme avec StringFormat() est que ca fait un arrondissement "implicite"
par exemple ceci;
par exemple ceci;
Code : Tout sélectionner
MsgBox(0,"",StringFormat("%f","5.85E-07"))
; reponse attendue : 5.85E-07|0.000000585La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
- mikell
- 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
OK mais c'est juste des paramètres à ajuster çaPour le faire bien propre, l'idéal serait de paramétrer en utilisant le nombre de décimales et l'exposant 
Code : Tout sélectionner
MsgBox(0,"",StringFormat("%.09f","5.85E-07"))
; reponse attendue : 5.85E-07|0.000000585Code : 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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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
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?
3.txt=> etc...
Ou seulement pour 1?
Glouglou.
- mikell
- 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
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é
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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
Si j'ai bien compris mon code doit être le suivant :
Merci de votre aide.
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.
- mikell
- 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
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
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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
Code : Tout sélectionner
$2 = "Years" &@TAB& "m" &@TAB& &@SPACE& &@TAB& "md" &@TAB& "md" &@TAB& &@SPACE&
$2^
Error in the expression.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&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
Raison : Ajout balise de code
Glouglou.
- mikell
- 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
Tu prends de diaboliques libertés avec la syntaxe alors autoit n'est pas content
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 " "
"Glouglou." ça veut dire "je coule" ou alors "je bois une bière" ? 
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)" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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
Je dois avouer qu'actuellement je coule complètement...
Glouglou.
