[R] FileOpen Et _StringBetween

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Status : Hors ligne

[R] FileOpen Et _StringBetween

#1

Message 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:
Nico ¤_¤
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween

#2

Message 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]
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween

#3

Message 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:
Nico ¤_¤
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween

#4

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween

#5

Message 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:
Nico ¤_¤
Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween

#6

Message 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:
Nico ¤_¤
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween  

#7

Message 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 !
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Status : Hors ligne

Re: [..] FileOpen Et _StringBetween

#8

Message 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)
Nico ¤_¤
Répondre