[R] Problème avec un fichier ini...

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
arniom
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 02 sept. 2008 02:00
Status : Hors ligne

[R] Problème avec un fichier ini...

#1

Message par arniom »

Bonjour,

Je suis en pleine découverte d'AutoIT et je bloque sur un problème avec un fichier .ini

Voici mon code dans l'état actuel des choses (les MsgBox sont pour me permettre de voir l'avancement de la chose pendant les tests...):

Code : Tout sélectionner

#include "file1.ini"
#include "file2.ini"
#include "file3.ini"

$file[0]="file1.ini"
$file[1]="file2.ini"
$file[2]="file3.ini"

Dim $i

While $i <= 2
    If FileExists(@WindowsDir & "\" & $file[$i]) == False Then
        FileCopy($file[$i], @WindowsDir, 1)
        MsgBox(64, $file[$i] " n'a pas été trouvé", "Le fichier " & $file[$i] & "a été copié dans " & @WindowsDir)
        If IniRead(@WindowsDir & "\" & $file[$i], "NETWORK", "STATION") <> StringRight(@ComputerName, 2) Then
            IniWrite(@WindowsDir & "\" & $file[$i], "NETWORK", "STATION", StringRight(@ComputerName, 2))
            MsgBox(64, "Valeur modifié", "La valeur de " & $file[$i] & " a été modifié")
        EndIf
    EndIf
    $i = $i+1
WEnd

MsgBox(64, "Script terminé", "Fin du script")
Les fichiers filen.ini sont bien entendu dans le même dossier que le script.

Maintenant que vous savez tout, je vous expose mon problème actuel...
Lorsque je compile ce code, (ou bien si j'essai de l'exécuter directement sans le compiler), AutoIT me dit qu'il n'arrive pas a parser le contenu du fichier ini.

Le contenu du fichier ini ressemble à ça (entre autre) :
[DIRECTORIES]
SERVER=L:\FOLDER
SAVE=L:\FOLDER\SAVE

[NETWORK]
STATION=03
Le message d'erreur est le suivant (lors de la compilation) :
Line 2 (File "D:\script\......\file1.ini"):
SERVER=L:\
SERVER=L^ ERROR

Error: Unable to parse line
L'erreur semble provenir du caractère ":" car j'ai testé le ":" et le "\", et lorsque j'enlève le ":" de la ligne, il passe à la ligne suivante pour me refaire la même erreur avec le ":" de la ligne suivante :evil:

Quelqu'un aurait une explication ? Et si possible, une solution :oops:

Cordialement,

Arniom
Modifié en dernier par arniom le mar. 02 sept. 2008 12:02, modifié 3 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#2

Message par Tlem »

Vous ne devez pas mettre des fichiers externes en Include.
Cette fonction est utilisée pour 'lier' d'autres fichier au3 contenant aussi du code (fonctions).
En supprimant le 3 includes, vous n'aurez plus cette erreur.

De plus, vous pourriez transformer cette ligne :

Code : Tout sélectionner

If FileExists(@WindowsDir & "\" & $file[$i]) == False Then
        FileCopy($file[$i], @WindowsDir, 1)
en ceci :

Code : Tout sélectionner

If Not FileExists(@WindowsDir & "\" & $file[$i]) Then FileCopy($file[$i], @WindowsDir, 1)
Au lieu du While, vous devriez utiliser une boucle For.

PS: Pensez à lire les règles de présentation d'un post.
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é".
arniom
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 02 sept. 2008 02:00
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#3

Message par arniom »

Merci pour l'amélioration du code.

J'ai supprimé les includes, existe t'il alors une solution pour intégrer les fichiers dans le script compilé en .exe ?
Ou bien dois-je obligatoirement avoir les fichiers .ini à côté du script, dans le même répertoire ?

L'avantage d'intégrer les 3 fichiers dans l'exécutable était pour moi d'être certain de ne pas oublier de les mettre à côté :roll:

De plus, en mettant les fichiers dans le même répertoire que l'exécutable, j'ai toujours une erreur a l'exécution :
Line -1:
Error: Expected a "=" operator in assignment statement
Concernant le titre du sujet, je suis en manque total d'inspiration pour faire un titre court par rapport à mon problème...
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#4

Message par ani »

hello,

Pour intégrer les fichiers vers votre exe, vous avez le choix entre :
la fonction = FileInstall("source", "dest" [, flag])
ou bien cette méthode = [Tuto]Ajout et utilisation de ressource dans l'exe
ou juste créer les fichiers ini avec la fonction FileWrite(filehandle or "filename", "line")

Exemple pour l'écriture de votre fichier ini

Code : Tout sélectionner

$ini_1 = "[DIRECTORIES]" & @CR & "SERVER=L:\FOLDER" & @CR & "SAVE=L:\FOLDER\SAVE" & @CR & "[NETWORK]" & @CR & "STATION=03"

FileWrite(".\File1.ini", $ini_1)
arniom
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 02 sept. 2008 02:00
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#5

Message par arniom »

Bonjour,

J'avais vu avec FileInstall, seulement dans la doc il est précisé que la source ne doit pas être une variable.

Je vais tenter avec le tuto, merci bien. Pour ce qui est d'écrire le fichier directement en script, la partie que j'ai montré n'est qu'une petite partie du fichier complet, cela serait trop long...

Par contre, j'ai toujours cette erreur lorsque je lance le script tel qu'actuellement (avec les fichiers ini dans le même répertoire que l'exécutable). Avez-vous une idée sur le pourquoi de cette erreur ? J'ai eu un doute sur mes fichiers ini mais après avoir tester dans un fichier contenant seulement la section que je souhaite modifier, j'ai toujours la même erreur...

Cordialement,
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#6

Message par ani »

pour le fileinstall,

FileInstall(le lien de votre fichier.ini, destination du fichier)

exemple repris de la documentation

Code : Tout sélectionner

$b = True
If $b = True Then FileInstall("C:\test.bmp", "D:\mydir\test.bmp")
y a bien une variable = $b

Pour le problème, avez vous un code à fournir (modification faite avec les informations soumissent par Tlem) ?
arniom
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mar. 02 sept. 2008 02:00
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#7

Message par arniom »

Re,

Pour le problème, c'est bon, je l'ai résolu, j'avais en fait tout simplement omis d'initialiser l'array... (Rien n'est écrit dans la doc à ce sujet là... :roll:)

Pour FileInstall, il y a en effet une variable, mais, comme précisé dans la doc, le fichier source ne peut être une variable :
The source file must be a string and not a variable so that the compiler can extract the filename to include. The source cannot contain wildcards.
Etant donné que j'utilise une boucle, je n'ai donc pas la possibilité d'utiliser de chaîne, à moins qu'il existe une fonction "ToString" que j'aurai manqué...

J'ai regardé le tuto pour inclure les fichiers dans l'exécutable, mais je trouve cela bien complexe pour un petit script d'administration, donc tant pis pour moi, je laisserai mes fichiers de côté, ça fonctionne tout aussi bien après tout... :D

Merci pour la réactivité dans les réponses !

Cordialement,
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec un fichier ini...

#8

Message par Tlem »

arniom a écrit :Pour le problème, c'est bon, je l'ai résolu, j'avais en fait tout simplement omis d'initialiser l'array... (Rien n'est écrit dans la doc à ce sujet là...
Faux.
Vous auriez dut lire la partie sur la déclaration de variable (Dim, Global, Local) !
Vous y auriez découvert comment initialiser un table et donc remplacer ceci :

Code : Tout sélectionner

$file[0]="file1.ini"
$file[1]="file2.ini"
$file[2]="file3.ini"
par ceci :

Code : Tout sélectionner

Dim $file[2]=["file1.ini","file2.ini","file3.ini"]
arniom a écrit :Pour FileInstall, il y a en effet une variable, mais, comme précisé dans la doc, le fichier source ne peut être une variable :
The source file must be a string and not a variable so that the compiler can extract the filename to include. The source cannot contain wildcards.
Exact, mais rien ne vous empêche de zipper l'ensemble de vos fichiers .ini
et de rajouter le fichier résultant par un FileInstall.
Lorsque vous aurez besoin de vos fichiers, vous n'aurez qu'a dézipper le tout ou vous voulez.
Certe pour cela il vous faudra rajouter un UDF et une ou deux Dll ou exe, mais cela est envisageable.
Il existe aussi de mémoire un UDF sur le forum Anglais qui permet de créer un fichier Zip sans compression car il n'utilise aucune librairie externe et peut être intégré tel quel dans un script.

Une dernière solution pour la route : ;)
http://www.autoitscript.fr/forum/viewto ... =21&t=1490
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