[R] Changer texte dans un fichier xcu

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
PetitBean
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 24 janv. 2011 19:18
Status : Hors ligne

[R] Changer texte dans un fichier xcu

#1

Message par PetitBean »

Bonsoir à tous,

Voilà le petit programme que j'aimerai. Je m'explique.
J'utilise la Liberkey et surtout Open Office en version portable.
Hors quand on paramètre son OOo pour que le chemin des "Mes Documents" se trouve sur la clé USB, le souci c'est que la lettre change en permanence d'un ordi à l'autre.
Le paramétrage de se chemin se trouve dans un fichier Paths.xcu dans :
F:\LiberKey\Apps\OpenOffice\Data\settings\user\registry\data\org\openoffice\Office

Le contenu du fichier Paths.xcu :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Paths" oor:package="org.openoffice.Office">
 <node oor:name="Paths">
  <node oor:name="Work">
   <prop oor:name="WritePath" oor:type="xs:string">
    <value>file:///[color=#BF00FF]F:[/color]/LiberKey/MyDocuments</value>
   </prop>
  </node>
 </node>
</oor:component-data>
Ici ma clé c'est F:
Comment détecter la lettre de ma clé et la changer dans le fichier ?

Je vous remercie par avance pour votre aide.

Petit Bean
Modifié en dernier par PetitBean le jeu. 10 févr. 2011 17:36, modifié 1 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#2

Message par jchd »

DriveGetDrive("REMOVABLE") suivi de DriveGetSerial($path) vont _beaucoup_ t'aider à retrouver ta clé parmi l'ensemble des volumes amovibles montés. Cela implique de s'enquérir du "serial_number" de ta clé, mais l'info est fixe (sauf reformatage). Si reformatage aléatoire ou fréquent [pourquoi donc ?] rabats-toi sur DriveGetLabel en prenant soin de nommer a clé d'une façon peu commune (et en priant fort !).

Ensuite adapter le ficher est le boulot d'une REGEXP bien sentie.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#3

Message par FernandG »

Autre méthode ... :wink:

Créer une sorte de "launcher" à base de :

Code : Tout sélectionner

MsgBox(64, "Lecteur", [b][color=#0000FF]StringLeft(@ScriptDir, 2)[/color][/b])
Remplacer la valeur avec un StringRegExpReplace dans le fichier "Paths.xcu"
Et terminer par un Run de OpenOfficeLKL.exe

Bonne soirée.
PetitBean
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 24 janv. 2011 19:18
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#4

Message par PetitBean »

Bonsoir,

Merci pour vos réponses super rapide.

Bon voici le petit script que j'ai fait. Je précise, je débute !!

Code : Tout sélectionner

#Include <Constants.au3>
#include <file.au3>

$lecteur = StringLeft(@ScriptDir, 2)

$sTxt = "<?xml version=""1.0"" encoding=""UTF-8""?>" & @CRLF
$sTxt &= "<oor:component-data xmlns:oor=""http://openoffice.org/2001/registry"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" oor:name=""Paths"" oor:package=""org.openoffice.Office"">" & @CRLF
$sTxt &= " <node oor:name=""Paths"">" & @CRLF
$sTxt &= "  <node oor:name=""Work"">" & @CRLF
$sTxt &= "   <prop oor:name=""WritePath"" oor:type=""xs:string"">" & @CRLF
$sTxt &= "    <value>file:///" & $lecteur & "/LiberKey/MyDocuments</value>" & @CRLF
$sTxt &= "   </prop>" & @CRLF
$sTxt &= "  </node>" & @CRLF
$sTxt &= " </node>" & @CRLF
$sTxt &= "</oor:component-data>"

; Pour écrire dans le fichier Paths.xcu, toute les données et la bonne lettre du lecteur
$hFile = FileOpen($lecteur & "\LiberKey\Apps\OpenOffice\Data\settings\user\registry\data\org\openoffice\Office" & "\Paths.xcu", 2)
FileWrite($lecteur & "\LiberKey\Apps\OpenOffice\Data\settings\user\registry\data\org\openoffice\Office" & "\Paths.xcu", $sTxt )
FileClose($hFile)
En fait je suis parti sur la solution de réécrire le fichier, car je ne connais pas la dernière lettre utilisée auparavant. Là c'était F mais ça aurait pu être E ou une autre.
Je trouve plus simple de faire comme ça, mais je débute !!

Ensuite je mets le fichier exe en lancement auto au démarrage de la LIBERKEY et comme ça mon fichier Paths.xcu sera à jour de la lettre du support USB !!

Si vous avez mieux je prends, et si vous une autre méthode, je prends aussi car je veux apprendre AUTOIT !!!

Merci pour vos prochaines réponses.
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#5

Message par FernandG »

PetitBean a écrit :je débute !!
x2
PetitBean a écrit :

Code : Tout sélectionner

$sTxt [b]&=[/b]
Mouais ... :wink:

Sinon, votre approche est correcte et précise.

Remarques :
- Vos #include ne sont pas nécessaire.
- Ajouter un contrôle d'erreur après le FileOpen (et/ou un FileExists):

Code : Tout sélectionner

$hFile = FileOpen($lecteur & "\LiberKey\Apps\OpenOffice\Data\settings\user\registry\data\org\openoffice\Office" & "\Paths.xcu", 2)
If $hFile <> -1 Then
    FileWrite($lecteur & "\LiberKey\Apps\OpenOffice\Data\settings\user\registry\data\org\openoffice\Office" & "\Paths.xcu", $sTxt )
    FileClose($hFile)
Else
    MsgBox(16, "Erreur", "Impossible d'ouvrir le fichier ""Paths.xcu"".")
EndIf
Exit
- Lors de la première lecture, il manquait le FileClose, donc plus besoin d'en parler.

Bonne journée.
PetitBean
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 24 janv. 2011 19:18
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#6

Message par PetitBean »

Bonsoir FernandG,

Merci pour la réponse, mais j'ai une question à poser.
Pour quoi le
Mouais ... :wink:
pour $sTxt &=. Y a t il mieux pour écrire le code ?

Vous m'indiquez aussi que les #include ne sont pas nécessaire, mais pour qu'elles raisons ?

Code : Tout sélectionner

$hFile = FileOpen($lecteur & "\LiberKey\Apps\LibreOffice\Data\settings\user" & "\registrymodifications.xcu", 2)
Si je met 10 à la place de 2, est-ce que ça aura le même effet que votre script de vérif ? Là je supprime le fichier pour le recréer ? C'est ça ?

J'ai très envie d'apprendre à programmer avec AutoIt.

Et merci pour le contrôle, j'y avais pas pensé !!

Merci beaucoup !!
Avatar du membre
FernandG
Membre émérite
Membre émérite
Messages : 194
Enregistré le : mar. 15 avr. 2008 21:50
Localisation : Picardie
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#7

Message par FernandG »

PetitBean a écrit :Pourquoi le Mouais ... pour $sTxt &=. Y a t il mieux pour écrire le code ?
Non, justement, ce n'est pas courant de voir un "débutant" écrire un &= sans vouloir généraliser et j'ai cru reconnaître un certain style :wink:
PetitBean a écrit :Si je met 10 à la place de 2, est-ce que ça aura le même effet que votre script de vérif
En mettant le mode à 10 dans FileOpen le contrôle est implicite, comme l'explique le flag 8.
PetitBean a écrit :Vous m'indiquez aussi que les #include ne sont pas nécessaire, mais pour qu'elles raisons ?
Exemple, ouvrez le fichier "File.au3" dans le dossier include d'AutoIt3, vous verez que votre code ne fait référence à aucune fonction présente ...
► Afficher le texte
Bonne soirée.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#8

Message par GaRydelaMer »

Bonjour

comme j'ai vu que tu voulais apprendre à programmer avec AutoIt:
Je te propose de faire ca avec les composants COM de windows, sachant que bien sur AutoIt sait les utiliser.
Ton fichier est un fichier XML, microsoft a créer un composant installé sur tous les windows qui permet la manipulation des fichiers XML, création, lecture modification.

Le parcours d'un fichier XML se fait avec la syntaxe Xpath, qui comme souvent plusieurs chemin mène à Rome.
Pour ton fichier XML, le Xpath de la chaine à modifier: $XPath = ""

Code : Tout sélectionner

; Création de l'objet et ouverture du XML
Global $PathXML = "Paths.xcu"

Global $xmlDoc = ObjCreate("Msxml2.DOMDocument.6.0")
With $xmlDoc
    .setProperty("SelectionNamespaces", "xmlns:oor='http://openoffice.org/2001/registry'")
    .load($PathXML)
EndWith
ConsoleWrite($xmlDoc.xml & @LF)

;~ Selection de la node avec XPath
Global $XPath = "//*/prop[@oor:name='WritePath']/value"
Global $Node = $xmlDoc.SelectSingleNode($XPath)
;~ Lecture de la valeur, propriété text de la node
Global $Path = $Node.text
ConsoleWrite($Path & @LF)
Global $DriveOld = StringMid($Path, 9, 2)
ConsoleWrite($DriveOld & @LF)
;~ mise à jour de la valeur
$Node.text = StringReplace($Path, $DriveOld, StringLeft(@ScriptDir, 2))
ConsoleWrite($Node.text & @LF)
;~ Ecriture/sauvegarde du fichier xml
$xmlDoc.save($PathXML)
ConsoleWrite($xmlDoc.xml & @LF)

;~ Même chose, je restaure la valeur, ici sans passer par XPath, on compte les enfants et on choisis le 1er
Global $Node = $xmlDoc.documentElement.firstChild.firstChild.firstChild.firstChild
Global $Path = $Node.text
ConsoleWrite($Path & @LF)
Global $Drive = StringLeft(@ScriptDir, 2)
ConsoleWrite($Drive & @LF)
$Node.text = StringReplace($Path, $Drive, $DriveOld)
ConsoleWrite($Node.text & @LF)
$xmlDoc.save($PathXML)
ConsoleWrite($xmlDoc.xml & @LF)
Plus simple, plus sur et tu pourras même lire et écrire plusieurs éléments dans ton fichier.

Explication du XPath, tu en trouveras des exemples sur le net, mais dans ce cas je choisis la 1ère node qui s'appelle "prop", dont un attribut s'appelle oor:name dont la valeur est 'WritePath', puis je sélection un enfant qui s'appelle "value", à ce moment je suis sur le noeud (la node $Node)

Code : Tout sélectionner

Global $XPath = "//*/prop[@oor:name='WritePath']/value"
Global $Node = $xmlDoc.SelectSingleNode($XPath)
<value>file:///F:/LiberKey/MyDocuments</value>
, $Node.text me donne le contenue texte de cette node. Je t'invite à visiter le site microsoft sur la doc de msxml, tu dois même avoir le fichier d'aide sur ton micro "xmlsdk4.chm".

Ensuite aprés ca il n' y a pas de gestion des erreurs, lecture des attributs, création etc, j'ai trouvé une UDF que j'ai bcp modifié pour utiliser les fichiers xml mais c'est pas encore finalisé.
PetitBean
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 24 janv. 2011 19:18
Status : Hors ligne

Re: [..] Changer texte dans un fichier xcu

#9

Message par PetitBean »

Bonjour,

FernandG : Merci pour les infos j'en prends note et je vais étudier le fichier "File.au3". Je suis pas tout à fait "débutant" je développe un peu en php. Mais je connais pas du tout AutoIt. Mais j'ai regardé pas mal de script et testé certaines choses avant de mettre mon ptit script.

GaRydelaMer : Merci beaucoup de votre réponse, je vais étudier, avec la plus grande attention, votre réponse. Et je pense que j'aurais des questions à vous poser !!!

Aller c'est parti !!!

Merci beaucoup !!
Répondre