[R] Remplacer une chaîne de caractères dans plusieurs fichiers

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

[R] Remplacer une chaîne de caractères dans plusieurs fichiers

#1

Message par Boulanza »

Bonjour,
Je cherche à remplacer une chaîne de caractères de plusieurs fichiers (64 fichiers) qui se trouvent dans un dossier.
#include<Array.au3>
#include"RecFileListToArray.au3"
Local  $hFileOpen = FileOpen("", $FO_OVERWRITE + $FO_BINARY)
$ar_Array = _RecFileListToArray (@TempDir & "\test\", "*.exe;*.dll", 0, 0, 2, 1, "Temp")
$Resultat =_ArrayDisplay($ar_Array, "Liste fichier")  ; Ceci est facultatif, c'est juste pour afficher la liste des fichiers.
$hFileOpen = FileOpen($Resultat, $FO_OVERWRITE + $FO_BINARY)
FileWrite($hFileOpen, '0x13456789789456123')
FileClose($hFileOpen)
Par contre pour un seul fichier ça marche parfaitement voir code ci-dessous:

Local  $hFileOpen = FileOpen("", $FO_OVERWRITE + $FO_BINARY)
        Local $hFileOpen = FileOpen("", $FO_OVERWRITE + $FO_BINARY)
      $hFileOpen = FileOpen(@TempDir & "\test\test.exe", $FO_OVERWRITE + $FO_BINARY)
      HexRemplace()
      Sleep(100)
   
   Func HexRemplace()
   FileWrite($hFileOpen, '0x123456789987654321')
   FileClose($hFileOpen)
EndFunc   ;==>HexRemplace

Merci pour votre aide.
Cordialement.
Modifié en dernier par Boulanza le lun. 04 mai 2020 13:19, modifié 2 fois.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 786
Enregistré le : ven. 12 août 2011 19:49
Localisation : Essonne
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#2

Message par walkson »

Bonjour,
Il me semble que vous prenez un sacrè raccourci :lol:
$hFileOpen = FileOpen($Resultat, $FO_OVERWRITE + $FO_BINARY)
Si $ar_Array est un array, il faut une boucle pour lire $ar_Array[$i]
$Resultat =_ArrayDisplay($ar_Array, "Liste fichier") => $Resultat = 1
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#3

Message par Boulanza »

Bonjour walkson et merci pour votre remarque. Le code ci-dessous, répond à une partie de ma demande, mais pour ajouter la seconde partie qui remplace les fichiers par une une nouvelle chêne de caractères de plusieurs fichiers, je bloque complètement. votre aide serait la bienvenue. Merci
#include<Array.au3>
#include"RecFileListToArray.au3"
$ar_Array = _RecFileListToArray (@TempDir & "\test\", "*.exe;*.dll", 0, 0, 2, 1, "Temp")
$Resultat =_ArrayDisplay($ar_Array, "Liste fichier")
$hFileOpen = FileOpen($Resultat, $FO_OVERWRITE + $FO_BINARY)

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#4

Message par mikell »

Le code ci dessus ne répond à rien du tout. Ousqu'elle est la boucle évoquée par walkson ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#5

Message par Boulanza »

Je bloque pour la réalisation de la boucle évoquée par walkson. Pour une boucle qui fonctionne correctement.

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 786
Enregistré le : ven. 12 août 2011 19:49
Localisation : Essonne
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#6

Message par walkson »

D'abord, utilisez des UDF actuels et fonctionnels
Exemple à tester:
 #include <Array.au3>
#include <File.au3>


$aArray = _FileListToArrayRec(@DesktopDir, "*.au3", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
    _ArrayDisplay($aArray, "Recur with filter")
   For $i = 1 To $aArray[0]
      ConsoleWrite($aArray[$i] & @CRLF)
      ;les opérations à faire sur les fichiers via $aArray[$i]
   Next
;==============================================================================================================
    Local $sAutoItDir = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", Default, -1))
    If StringRight($sAutoItDir, 5) = "beta\" Then
        $sAutoItDir = StringTrimRight($sAutoItDir, 5)
    EndIf
    ShellExecute($sAutoItDir & "\AutoIt3Help.exe","_FileListToArrayRec")
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#7

Message par mikell »

D'abord faites en sorte que _RecFileListToArray ne retourne QUE des fichiers (et pas des dossiers)
Ensuite le nombre de fichiers doit - en principe - être dans $ar_Array[0]
Donc vous bouclez comme ça :

For $i = 1 to $ar_Array[0]
...
traitement du fichier dont le nom/chemin est écrit dans l'élément $ar_Array[$i]
...
Next

Edit
Oups grillé par walkson :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 )

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#8

Message par Boulanza »

For $i = 1 to $ar_Array[0]
For $i = 1 to ^ ERROR

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#9

Message par Boulanza »

Bonjour,
Je ne voie pas mon erreur ? le confinement + le ramadan baaaaaaaaa
#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
Local $sAutoItDir=@TempDir & "\test\"
Local $aArray[1]
Local $aArray = _FileListToArrayRec($sAutoItDir, "*", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
For $i = 1 To $aArray[$i]
_ArrayAdd($aArray, $i)
Next

For $i = 0 To UBound($aArray)-1
    ConsoleWrite($aArray[$i] & @CRLF)
$hFileOpen = FileOpen($aArray[$i], $FO_OVERWRITE + $FO_BINARY)
FileWrite($aArray[$i], '0x123456789987654321')
Next

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#10

Message par Boulanza »

C'est là où je coince. Blocage total...
For $i = 0 To UBound($aArray)-1
ConsoleWrite($aArray[$i] & @CRLF)
$hFileOpen = FileOpen($aArray[$i], $FO_OVERWRITE + $FO_BINARY)
FileWrite($aArray[$i], '0x123456789987654321')
Next

Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 322
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Contact :
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#11

Message par franco »

Salut.

je vais surement poster une ânerie mais....
mikell a écrit :
dim. 03 mai 2020 18:08
D'abord faites en sorte que _RecFileListToArray ne retourne QUE des fichiers (et pas des dossiers)
Et tu utilises : $FLTAR_FILESFOLDERS : c'est normal ?


EDIT : normal que tu n'y arrives pas.

Regarde $FLTAR_FULLPATH dans l'aide de _FileListToArrayRec

++
L'entraide, c'est mon dada ;)

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 786
Enregistré le : ven. 12 août 2011 19:49
Localisation : Essonne
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#12

Message par walkson »

Bonjour Franco
S'il n'y avait que cela, ce ne serait pas grave !
$aArray = _FileListToArrayRec(@DesktopDir, "*.au3", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
Avec ce code, je lui ai servi un plat à domicile :P
Mais il a préféré ceci
Local $aArray = _FileListToArrayRec($sAutoItDir, "*", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
For $i = 1 To $aArray[$i]
_ArrayAdd($aArray, $i)
Next
S'il s'était donné la peine de lire l'aide, il aurait vu pour _FileListToArrayRe:
Succès:    Retourne un tableau de dimension 1 constitué comme il suit:
    [0] = Nombre de Fichiers/Répertoires retournés
    [1] = 1er Fichier/Répertoire
    [2] = 2e Fichier/Répertoire
et donc son code est un non sens !
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 322
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Contact :
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#13

Message par franco »

Ahhhhh.... j'avais pô vu


C'est parce que :
$Resultat =_ArrayDisplay($ar_Array, "Liste fichier") ; Ceci est facultatif, c'est juste pour afficher la liste des fichiers.

Mais bon, il peut lister tous les fichiers dans une seule et même variable et la mettre dans le presse-papier (ou console write), au lieu de compliquer le script. ;)

J'avoue :mrgreen:


Par contre, je me demande quelque chose :
----> S'il veut remplacer une chaine de caractère... S'il la connait d'avance... Y'a beaucoup plus simple. :P
L'entraide, c'est mon dada ;)

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères de plusieurs fichiers

#14

Message par Boulanza »

Vous êtes complètement loin de ma demande initiale: Remplacer une chaîne de caractères dans plusieurs fichiers.

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères dans plusieurs fichiers

#15

Message par mikell »

Certes. Mais pour faire ça il faut d'abord pouvoir accéder correctement aux fichiers en question
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères dans plusieurs fichiers

#16

Message par Boulanza »

Là je suis dans mon fichier et parfaitement :
 #include <Array.au3>
#include <File.au3>
Local $sAutoItDir=@TempDir & "\test\"
Local $aArray = _FileListToArrayRec($sAutoItDir, "*", $FLTAR_FILESFOLDERS, $FLTAR_RECUR, $FLTAR_SORT)
_ArrayDisplay($aArray, "Arbre trié")
Mon problème est de placer:
$hFileOpen = FileOpen($aArray[$i], $FO_OVERWRITE + $FO_BINARY)
FileWrite($aArray[$i], '0x123456789987654321')

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères dans plusieurs fichiers

#17

Message par mikell »

TOUTES les réponses dont vous avez besoin sont écrites et mentionnées dans les posts précédents
Construisez votre boucle For , et visualisez $aArray[$i] avec une Msgbox ou autre pour vérifier qu'il y a bien le chemin du fichier
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères dans plusieurs fichiers

#18

Message par Boulanza »

Bonsoir,
Problème résolus après Iftar: repas de rupture du jeûne qui est pris le soir au coucher du soleil (en pus du confinement sous une chaleur de 40°).
La solution été évidente de puis la première réponse mais que faire... Je compte sur votre compréhension et je vous remercie de votre soutien et de votre coopération...
Cordialement.
#include <Array.au3>
#include <File.au3>

Local $sAutoItDir=@TempDir & "\testD\"
$aArray = _FileListToArrayRec($sAutoItDir, "*", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
    ;_ArrayDisplay($aArray, "Recur with filter")
If  _ArrayDisplay($aArray) = 1 Then
        For $i = 1 To $aArray[0]
               ; MsgBox(64, "test", $aArray[$i])
            ;ConsoleWrite($aArray[$i] & @CRLF)
$hFileOpen = FileOpen($aArray[$i], $FO_OVERWRITE + $FO_BINARY)
FileWrite($aArray[$i], '0x123456789987654321')
                ;les opérations à faire sur les fichiers via $aArray[$i]
        Next
EndIf
Modifié en dernier par Boulanza le lun. 04 mai 2020 01:47, modifié 1 fois.

Boulanza
Niveau 7
Niveau 7
Messages : 475
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères dans plusieurs fichiers

#19

Message par Boulanza »

Si on peut optimiser cela ce serait parfait ?

Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 322
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Contact :
Status : Hors ligne

Re: [..] Remplacer une chaîne de caractères dans plusieurs fichiers

#20

Message par franco »

Salut.
Vous êtes complètement loin de ma demande initiale: Remplacer une chaîne de caractères dans plusieurs fichiers.
Pas du tout.

Je me cite ( ^^ )
Par contre, je me demande quelque chose :
----> S'il veut remplacer une chaine de caractère... S'il la connait d'avance... Y'a beaucoup plus simple. :P
Donc, question : la chaine à remplacer, c'est la même partout ?


Si oui, y'aura de l'optimisation.... ^^


++
L'entraide, c'est mon dada ;)

Répondre