Page 1 sur 1

[R] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 11:22
par Nicoloquinte
Bonjour , :D
je voudrait lire un fichier de préférences en retirant les balises XML :mrgreen: , du coup , j'ai fait ce petit code :

[codeautoit]#include <FileConstants.au3>
Local Const $PrefFilePath = @WorkingDir & "\Default.txt"

Local $hPref = FileOpen($PrefFilePath, $FO_READ)
If $hPref = -1 Then
MsgBox(0, "", "Une erreur est survenue lors de la lecture du fichier Default.TXT")
EndIf
FileSetPos($hPref, 0, $FILE_BEGIN)

local $fileread = FileRead($hPref)
$Check = _StringBetween( $fileread, '<Controlertype>', '</Controlertype>')
MsgBox(0,"DevCentral ",$Check[0])[/codeautoit]

Évidement , FileOpen tout seul , marche (pour l'afficher entièrement dans une MsgBox :? ) , et _Stringbetween Marche pour une variable toute seule (même si je copie le contenu du fichier dedans :? )
Mais , le code ne marche pas , et retourne cette erreur :

MsgBox(0,"DevCentral ",$Check[0])
MsgBox(0,"DevCentral ",$Check^ ERROR
->23:14:34 AutoIt3.exe ended.rc:1
+>23:14:34 AutoIt3Wrapper Finished.
>Exit code: 1 Time: 0.5568

:cry: :cry: :cry: :mrgreen:

Bien sur , $Check est un Tableau , alors ,Je peut pas enlever le [0] :mrgreen:

D’où cela pourrait venir , mon fichier n'est pas lu comme une chaîne de caractères :shock: :?:

Merci d'avance :mrgreen:

Re: [..] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 14:02
par orax
Bien sur , $Check est un Tableau , alors ,Je peut pas enlever le [0] :mrgreen:
Je ne suis pas entièrement d'accord. ^^
$Check est un tableau seulement si _StringBetween ne retourne pas une erreur.
La chaine n'est pas trouvée donc $Check n'est pas un tableau et _StringBetween retourne une erreur.

[codeautoit]$Check = _StringBetween($fileread, '<Controlertype>', '</Controlertype>')
If Not @error Then MsgBox(0, "DevCentral ", $Check[0])[/codeautoit]

Re: [..] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 14:44
par Nicoloquinte
Merci , ça ne marque plus d'erreur mais sa ne marche toujours pas :mrgreen:

[codeautoit]#include <String.au3>
#include <FileConstants.au3>
Local Const $PrefFilePath = @WorkingDir & "\Default.txt"

Local $hPref = FileOpen($PrefFilePath, $FO_READ)
If $hPref = -1 Then
MsgBox(0, "", "Une erreur est survenue lors de la lecture du fichier Default.Prefg")
EndIf
FileSetPos($hPref, 0, $FILE_BEGIN)

local $fileread = FileRead($hPref)
$Check = _StringBetween( $fileread, '<Controlertype>', '</Controlertype>')

If Not @error Then MsgBox(0, "DevCentral ", $Check[0])[/codeautoit]
:D :D

jai une erreur 0 donc pas d'erreur :shock: :shock:

Re: [..] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 14:49
par orax
Oui je m'en doute. :mrgreen: Mais c'est normal si la chaine n'est pas trouvée.
jai une erreur 0 donc pas d'erreur :shock: :shock:
Non, il y a bien une erreur sinon la MsgBox s'afficherait. Après _StringBetween, @error est différent de 0.

Re: [..] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 15:18
par Nicoloquinte
Bah , C'est trop bizarre, je t'invite a tester le code parce que là .... c'est super bizarre :mrgreen:

On dirait que mon fichier n'est pas lu comme un chaîne de caractères classique , parce que les deux fonctions fonctionnent indépendamment , et dès que j'ajoute l'autre dans l'une , ça Marche plus :cry:

Re: [..] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 17:28
par Nicoloquinte
Si il n'y a pas de solution , de devais me débrouiller avec StringLeft Et StringRight :? mais , c'est brouillon et , nope :mrgreen: en fait ce serai super cool qu'il y ait une solution , je cherche depuis trois jours :shock:

Re: [..] FileOpen Et _StringBetween  

Posté : mar. 19 juil. 2016 17:52
par orax
Nicoloquinte a écrit :Bah , C'est trop bizarre, je t'invite a tester le code parce que là .... c'est super bizarre :mrgreen:
Je l'avais testé et je n'ai pas eu de problème. Si j'ai <Controlertype>test</Controlertype> dans un fichier, ça affiche "test".
Pour moi, le code fourni est fonctionnel, mais je suis peut-être passé à côté de quelque chose.
Il y a juste la ligne FileSetPos($hPref, 0, $FILE_BEGIN) qui pourrait être supprimée. Et on pourrait aussi ajouter un FileClose.
[codeautoit]#include <String.au3>
#include <FileConstants.au3>
Local Const $PrefFilePath = @WorkingDir & "\Default.txt"

Local $hPref = FileOpen($PrefFilePath, $FO_READ)
If $hPref = -1 Then
MsgBox(0, "", "Une erreur est survenue lors de la lecture du fichier Default.Prefg")
EndIf

Local $fileread = FileRead($hPref)
FileClose($hPref)

$Check = _StringBetween($fileread, '<Controlertype>', '</Controlertype>')
If Not @error Then MsgBox(0, "DevCentral ", $Check[0])[/codeautoit]

Si le fichier à lire est toujours placé dans le dossier du script, alors @ScriptDir conviendrait mieux.
On peut aussi simplifier le script de la façon suivante.
[codeautoit]#include <String.au3>
#include <FileConstants.au3>
Local Const $PrefFilePath = @ScriptDir & "\Default.txt"

Local $fileread = FileRead($PrefFilePath)
If @error Then
MsgBox(0, "", "Une erreur est survenue lors de la lecture du fichier Default.Prefg") ; <= Default.Prefg ou Default.txt ?
EndIf

$Check = _StringBetween($fileread, '<Controlertype>', '</Controlertype>')
If Not @error Then MsgBox(0, "DevCentral ", $Check[0])[/codeautoit]

Le fichier qui est lu est Default.txt, or la MsgBox affiche "Une erreur est survenue lors de la lecture du fichier Default.Prefg". Bizarre !

Re: [..] FileOpen Et _StringBetween

Posté : mar. 19 juil. 2016 21:52
par Nicoloquinte
.Prefg , cétait un test , mais comme sa ne marchait pas , j'ai mis .TXT :mrgreen:

Et , le problème venait du contenu du fichier lui-même , :shock: j'en pleure de rire , trois jour et une erreur a <Contrôlertype> a la place de <Controlertype> : :evil:
en tout cas , merci d'avoir simplifié mon code qui était bon depuis le début :mrgreen:
Merci :P :lol: 8)