Page 1 sur 1

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

Posté : ven. 21 nov. 2008 16:02
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

Re: Chercher et remplacer une ligne dans un fichier

Posté : ven. 21 nov. 2008 17:05
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')

Re: Chercher et remplacer une ligne dans un fichier

Posté : ven. 21 nov. 2008 17:55
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.

Re: Chercher et remplacer une ligne dans un fichier

Posté : ven. 21 nov. 2008 18:57
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 ([..])

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

Posté : ven. 21 nov. 2008 23:51
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é ")