Line input

cs_enzino Messages postés 8 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 juin 2003 - 30 avril 2003 à 17:44
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 - 2 mai 2003 à 16:24
Bonjour,

J'aimerai savoir s'il est possible, que lorsque on lit un fichier texte en line input et qu'un certain mot et détecté "COLUMNS", j'aimerai enregistrer dans une variable tableau à partir de la ligne suivante jusqu'à un certain endroit "DATA" sans devoir refaire une boucle.

Le problème est que la première ligne de mon tableau contient "COLUMNS" et moi j'aimerai qu'il démarre de la ligne suivante ???

Je ne sais pas si c'est clair !! alors voilà plus en détail .

Dans un fichier texte : x = valeurs souhaitée dans un tableau

aaa
bbb
ccc
COLUMNS
hhh x
iii x
jjj x
kk x
DATA
ddd
eee
fff

Voilà mon bou de code:

Open sNomFichierMif For Input As #1 ' Ouvre le fichier.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, TextLine ' Lit la ligne dans la variable.
i = i + 1
ReDim ExtracLigneMif(i)
ExtracLigneMif(i) = TextLine ' affecte la ligne du fichier mif dans un tableau

'si il trouve le Columns alors met le flag sur true
Select Case LTrim(Left(UCase(TextLine), 7))
Case "COLUMNS"
flag = True
Case LTrim(Left(UCase("DATA"), 4))
flag = False
Case Else
End Select

'enregistre dans mon tableau les éléments
If flag = True Then
j = j + 1
ReDim TabAttribut(j)
TabAttribut(j) = TextLine
Form1.Lst_ChoixAttribut.AddItem TabAttribut(j)
Else
End If
Loop
Close #1

Merci d'avance pour votre aide.

Enzino

3 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
30 avril 2003 à 18:23
Bonsoir
Essaie :

Open sNomFichierMif For Input As #1 ' Ouvre le fichier.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, TextLine ' Lit la ligne dans la variable.
i = i + 1
ReDim Preserve ExtracLigneMif(i)' conserver les valeurs précédentes
ExtracLigneMif(i) = TextLine ' affecte la ligne du fichier mif dans un tableau

'si il trouve le Columns alors met le flag sur true
Select Case Trim(UCase(TextLine))
Case "COLUMNS"
flag = True
Case "DATA"
flag = False
Case Else
End Select

'enregistre dans mon tableau les éléments
If flag = True Then
j = j + 1
ReDim Preserve TabAttribut(j)
TabAttribut(j) = TextLine
Form1.Lst_ChoixAttribut.AddItem TabAttribut(j)
Else
End If
Loop
Close #1
0
cs_enzino Messages postés 8 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 juin 2003
1 mai 2003 à 08:34
Mon problème n'est pas le mot Preserve ! Ca joue.
Quand je trouve le mot "COLUMNS" alors je met le flag à true.
Et c'est là qu'il commence à enregistrer dans ma variable tableau mais le problème c'est qu'il prend la première valeur qui est "COLUMNS".Et moi j'aimerai qu'il enregistre à partir de la ligne suivante, c.à.d. à partir de la ligne hhh.

Je peux résoudre le cas par une deuzième boucle, mais si c'est possible d'éviter !!

aaa
bbb
COLUMNS
hhh
jjj
kk
DATA
ddd
eee
fff

'si il trouve le Columns alors met le flag sur true
> Select Case Trim(UCase(TextLine))
> Case "COLUMNS"
> flag = True
> Case "DATA"
> flag = False
> Case Else
> End Select
>
> 'enregistre dans mon tableau les éléments
> If flag = True Then
> j = j + 1
> ReDim Preserve TabAttribut(j)
> TabAttribut(j) = TextLine
> Form1.Lst_ChoixAttribut.AddItem TabAttribut(j)
> Else
> End If
> Loop
> Close #1
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
2 mai 2003 à 16:24
Voila qui devrait marcher :

Dim i As Long, j As Long
Open sNomFichierMif For Input As #1 ' Ouvre le fichier.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Line Input #1, TextLine ' Lit la ligne dans la variable.
i = i + 1
ReDim Preserve ExtracLigneMif(i)
ExtracLigneMif(i) = TextLine ' affecte la ligne du fichier mif dans un tableau
'si il trouve le Columns alors met le flag sur true ET LIT LA LIGNE SUIVANTE
If Trim(Left(UCase(TextLine), 7)) = "COLUMNS" Then
Line Input #1, TextLine
flag = True
End If
If Trim(Left(UCase(TextLine), 4)) = "DATA" Then
flag = False
End If
'enregistre dans mon tableau les éléments
If flag = True Then
j = j + 1
ReDim Preserve TabAttribut(j)
TabAttribut(j) = TextLine
Form1.Lst_ChoixAttribut.AddItem TabAttribut(j)
End If
Loop
Close #1
0
Rejoignez-nous