[R] Problème _StringBetween et array

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

[R] Problème _StringBetween et array

#1

Message 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à ^^'
Modifié en dernier par GhostLine le mer. 17 févr. 2010 12:18, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#2

Message 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 ?
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é".
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

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

#3

Message 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
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

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

#4

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Problème _StringBetween et array

#5

Message 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 ...
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