Page 1 sur 1

[R] Problème _StringBetween et array

Posté : mar. 16 févr. 2010 16:12
par GhostLine
Encore et toujours dans mon traitement :)

Je parcours mon fichier ligne par ligne, chaque ligne comportant à un endroit ou à un autre le mot "Télécollecte". Je cherche à séparer la partie à gauche (càd celle entre le début de la ligne et le mot "Télécollecte"), afin de compter le nombre de caractères ";" que cette partie contient.

Problème : je n'arrive pas à sortir la partie de gauche de la chaine (voir code ci-dessous) en utilisant $test[0], qui devrait pourtant renvoyer cette dernière dans le cas où la condition est remplie ...

Code : Tout sélectionner

#include <file.au3>
#include <String.au3>
#include <Array.au3>
#include <FileListToArray3.au3>

$nbre_lignes = _FileCountLines("d:\axconfig.csv")
Dim $array_count[$nbre_lignes]

$ouvrircsv = FileOpen ("D:\axconfig.csv",0) ; ouvre le fichier csv

for $i=1 to _FileCountLines("D:\axconfig.csv")
     $ligne = FileReadLine ($ouvrircsv)
     $ligne = _ArrayToString($ligne)
     $test = _StringBetween($ligne, "", "Télécollecte")
     MsgBox(0, "", $test[0])
Next

FileClose ($ouvrircsv) ; ferme le fichier csv
Encore une fois, je veux bien un coup de main, parce que je sèche là ^^'

Re: [..] Problème _StringBetween et array

Posté : mar. 16 févr. 2010 17:41
par Tlem
A quoi vous sert la ligne

Code : Tout sélectionner

$ligne = _ArrayToString($ligne)
puisque elle ré-initialise la variable $ligne ?

Pourquoi utiliser _FileCountLines() sur la lecture du fichier, puisque le test de la variable @error suffit pour savoir si vous êtes en fin de fichier ?

Re: [..] Problème _StringBetween et array

Posté : mer. 17 févr. 2010 08:49
par GhostLine
Salut Tlem,

merci de ta réponse. Pour $ligne, c'était surtout pour vérifier si le type de la variable était déjà le bon. En ce qui concerne le _filecountlines, c'est pour maitriser le positionnement des valeurs retournées dans un tableau.

Pour en revenir à mon problème, voici l'erreur à la compilation que j'ai :

>"S:\AutoIt\SciTe\..\autoit3.exe" /ErrorStdOut "D:\AutoIt\toto.au3"
D:\AutoIt\toto.au3 (32) : ==> Subscript used with non-Array variable.:
MsgBox(0, "", $test[0])
MsgBox(0, "", $test^ ERROR
>Exit code: 1 Time: 0.428

Re: [..] Problème _StringBetween et array

Posté : mer. 17 févr. 2010 11:47
par GhostLine
Bon, je viens de trouver la solution à mon problème ... il s'avère que _StringBetween n'aime pas trop que l'on titille le champ [0] de la table de la variable à laquelle on assigne son résultat si l'on tombe sur une ligne vide. Du coup, ça fonctionne en utilisant le code suivant :

Code : Tout sélectionner

#include <file.au3>
#include <String.au3>
#include <Array.au3>
#include <FileListToArray3.au3>

$ouvrircsv = FileOpen ("D:\axconfig.csv",0) ; ouvre le fichier csv
for $i=1 to _FileCountLines("D:\axconfig.csv")
    $abc = FileReadLine ($ouvrircsv, $i) ; lit le fichier csv
    $test = _StringBetween($abc, "", "Télécollecte")
    If $abc <> "" Then MsgBox(0, "", $test[0] )
Next
FileClose ($ouvrircsv) ; ferme le fichier csv

Re: [R] Problème _StringBetween et array

Posté : mer. 17 févr. 2010 17:35
par Tlem
Pour éviter tout risque d'utilisation d'un élément de tableau inexistant, vous deviez rajouter le contrôle de celui-ci avant l'affichage de $test[0].

Code : Tout sélectionner

If IsArray($test) Then ...