Line input

Signaler
Messages postés
8
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 juin 2003
-
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
-
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

Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
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
Messages postés
8
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 juin 2003

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
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
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