[..] Chercher et remplacer une ligne dans un fichier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

[..] Chercher et remplacer une ligne dans un fichier

#1

Message par corrs78 »

Help me! j'ai beau essayer de me débrouiller tout seul, mais j'arrive pas au résultat souhaité.
Je m'explique:

Je souhaite ajouter une ligne dans un fichier préférence de Firefox.
Ce paramètre correspond à la valeur de la passerelle de ma société (Proxy).

Voilà mon début de code, je lit le fichier de préférence de Firefox...

Code : Tout sélectionner

#include <file.au3>
#NoTrayIcon

$file = FileOpen(@UserProfileDir & "\Application Data\Mozilla\Firefox\profiles.ini", 0)

; On verifie si on peut ouvrir le fichier de preference firefox, ou si firefox est installé.
    If $file = -1 Then 
        Exit
    EndIf
    
    ; On récupère le numéro du profil utilisateur
    $profilFirefox = FileReadLine($file, 7)
    FileClose($file)

    ; On tronque la variable (profil) pour trouver le code profile
    $var=stringsplit($profilFirefox,"/")
    $result = $var[2]

$fichierlu = FileOpen(@UserProfileDir & "\Application Data\Mozilla\Firefox\profiles\" & $result & "\prefs.js",0)
 
Voilà les paramètre à ajouter (en rose) :
user_pref("network.cookie.prefsMigrated", true);
user_pref("network.proxy.autoconfig_url", "http://proxy.mi:6666/monproxy");
user_pref("network.proxy.type", 2);

Là ou ça se complique (pour moi), ces lignes ne sont pas toujours au même N° de ligne.
Et j'ai du mal à checker ces valeurs, pour voir si elle sont deja présentes car elle contiennent des doubles côtes.

En résumé:

Je veux rechercher dans le fichier pref.js
"http://proxy.mi:6666/monproxy"
Si pas présent alors je supprime la ligne et je réécri :
user_pref("network.proxy.autoconfig_url", "http://proxy.mi:6666/monproxy");

J'espère avoir était clair. :/

Merci
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: Chercher et remplacer une ligne dans un fichier

#2

Message par jbnh »

Si pas présent alors je supprime la ligne et je réécri :
quelle ligne?

Quoi qu'il en soit voici plusieurs éléments pour vous aider:

Stringreplace:
http://www.autoitscript.com/autoit3/doc ... eplace.htm

chercher une mot dans un texte:

Code : Tout sélectionner

#include <file.au3>
 
Dim $array
;-------------------------------------------
Dim $word = "coucou"
$filename = 'blabla.js'

;-------------------------------------------

_FileReadToArray($filename, $array)
For $X = 1 to $Array[0]
    If StringInStr($array[$X], $word) Then
       $var = FileReadLine($filename, $X)
        
    EndIf
Next
ou $var contient la ligne.

ps: pour les problèmes de quotes un exemple:

Code : Tout sélectionner

msgbox(0, "test", 'cette "phrase" a des double quotes')
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: Chercher et remplacer une ligne dans un fichier

#3

Message par corrs78 »

cette ligne :
user_pref("network.proxy.autoconfig_url");

Je pense que c'est plus facile de la supprimer et de la réécrire que d'insérer un paramètre à l'intérieur.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: Chercher et remplacer une ligne dans un fichier

#4

Message par jbnh »

user_pref("network.proxy.autoconfig_url"); sera unique dans ton texte? (il n'apparaitra qu'une fois?)

alors:

Code : Tout sélectionner

$fichierlu = FileOpen(@UserProfileDir & "\Application Data\Mozilla\Firefox\profiles\" & $result & "\prefs.js",0)
$chars = FileRead($fichierlu, 1)
$newstring = StringReplace($chars, 'user_pref("network.proxy.autoconfig_url");', 'user_pref("network.proxy.autoconfig_url", "http://proxy.mi:6666/monproxy");')
FileDelete (@UserProfileDir & "\Application Data\Mozilla\Firefox\profiles\" & $result & "\prefs.js")
FileWrite (@UserProfileDir & "\Application Data\Mozilla\Firefox\profiles\" & $result & "\prefs.js", $newstring)
merci aussi de lire les règles d'un post pour éditer ton titre ([..])
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 : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Chercher et remplacer une ligne dans un fichier

#5

Message par Tlem »

Ceci me semblerait plus adapté :

Code : Tout sélectionner

$Prefs = ".\prefs"

If FileExists($Prefs & ".js") Then FileMove($Prefs & ".js", $Prefs & ".js.old", 1)

$file1 = FileOpen($Prefs & ".js.old", 0)
$file2 = FileOpen($Prefs & ".js", 2)

While 1
    $line = FileReadLine($file1)
    If @error = -1 Then ExitLoop
    
    If StringInStr($line, 'user_pref("network.proxy.type"') Then        ; La chaine à trouver dans la ligne.
        FileWriteLine($file2, 'user_pref("network.proxy.type", 2);')    ; La ligne de remplacement.
    Else
        FileWriteLine($file2, $line)
    EndIf
Wend

FileClose($file1)
FileClose($file2)

MsgBox(64, "Terminé", "Remplacement terminé ")
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é".
Répondre