Lecture d'un endroit precis du fichier texte

cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008
- 22 févr. 2004 à 10:41
pcpunch
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
- 23 févr. 2004 à 13:48
Lulu !
Bon alors ce pour quoi j'ai besoin d'aide ne doit pas etre insoluble mais en tout cas c'est pas de mon niveau...
Voila g un fichier texte qui contient (par exemple) :

class Mission
{
addOns[]=
{
"BRDM",
"Vulcan",
"G36a",
};
addOnsAuto[]=
{
"Bradley",
"G36a",
"6g30"
};
randomSeed=6439939;
class Intel
{
briefingName="Morton batle";
startWeather=0.331416;
startFog=0.275137;
forecastWeather=0.074787;

... encore plein de truc apres...
Moi j'aimerais récupérer ce que contient la classe addons, en clair, ici, j'aimerais récupérer BRDM, Vulcan et G36a.
Il faut donc j'imagine une simple fonction pour lire le texte, rechercher la ligne qui contient AddOns et les valeurs qu'il lui sont affecté (attention sans les []=/"" et ce genre de saleté.

Je vous remercie grandement de m'aider.

Lionel4 - Débutant

15 réponses

pcpunch
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
22 févr. 2004 à 12:16
Voila un petit exemple vite fais!!!!

Dim Capture As Boolean
Dim Ligne As String
Dim Temp As String
Capture = False

Open "c:\test.txt" For Input As #1 'le fichier txt
Do While Not EOF(1)
    Line Input #1, Ligne
        If InStr(LCase(Ligne), LCase("AddOns")) <> 0 Then Capture = True
        If InStr("};", Ligne) <> 0 Then Exit Do        If Capture And Left(Ligne, 1) Chr(34) Then Temp Temp & Ligne
Loop

'On supprime les " et on supprime le dernier ","
Temp = Replace(Temp, Chr(34), "")
Temp = Left(Temp, Len(Temp) - 1)
'Temp contient la classe addons séparé par des ",", pour les recuperer un par un il faut
'faire un split de temp avec separateur ","

MsgBox "Variable temp : " & Temp

'Split
Dim Mot() As String
Mot = Split(Temp, ",")
For i = 0 To UBound(Mot)
MsgBox "Mot nr" & i & " : " & Mot(i)
Next i



Ps: A ton service !!!! si tu veu des explications...
0
pcpunch
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
22 févr. 2004 à 12:18
G oublier le Close #1 a mettre a la fin de la sub!!!!!
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 12:53
Ah ca c cool, j'avais trouvé un autre moyen mais plu compliqué. T'as fait en une trentaine de ligne ce que j'ai fait en trois modules lol !
Je v tester ta méthode et MERCI !!!

Lionel4 - Débutant
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 13:05
Temp = Left(Temp, Len(Temp) - 1)

Invalid procedure call or argument :(

Sinon :
InStr(LCase(Ligne), LCase("AddOns")) <> 0
ca veut dire koi ?

et le mot Left a quel signification ?
Ensuite le split ca va me donner toutes les valeurs mais de quelle facon ? Est-ce que j'aurais Mot1 "nomaddon1" Mot2 ... etc ou c autrement ?
Sinon encore merci c vraiment cool de voir des types aussi sympa pour expliquer des trucs au noob comme moi :) Enfin on a tous commencer par aprendre (enfin j'espere lol :D)

Lionel4 - Débutant
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ld40
Messages postés
336
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
22 février 2019
1
22 févr. 2004 à 15:44
tiens, en attendant la réponse de pcpunch , je te propose ça:
maval(1) maval(2) ...etc sont les valeurs que tu cherches (normalement)

Sub Macro1()
Dim i As Integer
Dim a$
Dim compte As Integer
'tableau qui contiendra les valeurs trouvées
ReDim maVal(1)

compte = 0
i = FreeFile
Open "c:\test.txt" For Input As #i
    Do Until EOF(i)
        Line Input #i, a$
        If InStr(1, a$, "addOns[]=") Then Exit Do
    Loop
    Line Input #i, a$
    Do Until EOF(i)
        Line Input #i, a$
        If InStr(1, a$, "};") Then Exit Do
        compte = compte + 1
        ReDim Preserve maVal(compte)
        a$ = Trim(a$)
        If Len(a$) > 1 Then
            If Right(a$, 1) = "," Then
                a$ = Left(a$, Len(a$) - 1)
            End If
            a$ = Replace(a$, Chr(34), " ")
            maVal(compte) = Trim(a$)
        End If
    Loop
Close #i
End Sub
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 22:51
c quasi parfait id40 le seul truc que je peut te reprocher c que ton code me donne
maVal(1) = " BRDM"
Il reste les espaces devant :(

Merci pour ton code cela dit

Lionel4 - Débutant
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 22:53
ah oui c vrai que j'avais oublié de preciser que ce qui apparait en dessous de
Class Addons
{
"BRDM"

Ca se présente comme ca y a plein d espace

Lionel4 - Débutant
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 23:06
Arf j arrive pas le post se met en forme tout seul.
En fait y a :
/1 tabulations/ Class Addons
/2 tabulations/ {
/2 tabulations/ BRDM
etc etc...

Ou evidemment /2 tabulations/ correspond a deux appui sur la touche tabulation mais vu qu'on ne peut pas mettre c tabulation sur le forum...

Lionel4 - Débutant
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 23:24
Pour id40 je viens de résoudre le problème :
J'ai ajouté Dim az as integer et entre les lignesa$ Replace(a$, Chr(34), "") et maVal(compte) Trim(a$) j'ai ajouté
az = i
For az = 1 To compte
a$ = Right(a$, Len(a$) - 1)
Next az

En clair ca donne en entier :

Sub Macro1()
Dim i As Integer
Dim a$
Dim compte As Integer
Dim az As Integer
'tableau qui contiendra les valeurs trouvées
ReDim maVal(1)

compte = 0
i = FreeFile
Open (App.Path & "" & "mat.txt") For Input As #i
Do Until EOF(i)
Line Input #i, a$
If InStr(1, a$, "addOns[]=") Then Exit Do
Loop
Line Input #i, a$
Do Until EOF(i)
Line Input #i, a$
If InStr(1, a$, "};") Then Exit Do
compte = compte + 1
ReDim Preserve maVal(compte)
a$ = Trim(a$)
If Len(a$) > 1 Then
If Right(a$, 1) = "," Then
a$ = Left(a$, Len(a$) - 1)
End If
a$ = Replace(a$, Chr(34), "")
az = i
For az = 1 To compte
a$ = Right(a$, Len(a$) - 1)
Next az

maVal(compte) = Trim(a$)
End If
Loop
Close #i
Kill (App.Path & "" & "mat.txt")

MsgBox "Valeurs : " & maVal(1) & Chr$(10) & " || Valeur 2 : " & maVal(2)

End Sub


Le pire c'est que je sais pas trop ce que je lui est dit de faire lol. J'ai regardé vos deux codes et j'en ai déduit ca. Voila ce que je comprends de ma boucle For Next si je me trompe qqpart dite le:
<table border=0 cellspacing=0 cellpadding=4 bgcolor=#E0E0E0><tr><td class=code>
For az = 1 To compte 'de la ligne 1 à compte (qui représente le nb de ligne
a$ = Right(a$, Len(a$) - 1) 'on prend a$ depuis la droite et on enlève 1 caractère (ca veut dire quoi Len(a$) ?)
Next az ' et on recommence !!!

Lionel4 - Débutant
0
cs_lionel4
Messages postés
129
Date d'inscription
samedi 29 novembre 2003
Statut
Membre
Dernière intervention
26 septembre 2008

22 févr. 2004 à 23:36
corrrection, c'est For az = 0 to 1

Lionel4 - Débutant
0
pcpunch
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
22 févr. 2004 à 23:51
Slt, pour :
Temp = Left(Temp, Len(Temp) - 1)

Invalid procedure call or argument :( ben la je vois pas!!! ou essaie left$ mais bon??? suis septique

Sinon :
InStr(LCase(Ligne), LCase("AddOns")) <> 0
veu dire : si il y a Addons en minuscule dans Ligne(en minuscule) alors!!!!

La fonction Instr renvoie 0 si la recherche est null sinon il renvoie la position de la chaine rechercher!!!!

et le mot Left a quel signification ?
Left(Variable,longeur) 'renvoie les lettres de gauche de la variable selon la longeur!!
Ex :
Left("Test",2) renvoie "Te"
Left("Exemple",4) renvoie "Exem"
Etc...
Ensuite le split ca va me donner toutes les valeurs mais de quelle facon ? Est-ce que j'aurais Mot1 "nomaddon1" Mot2 ... etc ou c autrement ?

En fait dans la variable temp tu a "Nomaddon1,nomaddon2,etc..." un split permet de stocker dans un tableau les chaine par rapport a un delimiteur!! en l'occurence ici la ",".
Donc dans le tableau Nom (Dim Nom() as string), tu va avoir dans l'ordre chronologique de la chaine temp :
Nom(0)="nomaddon1"
nom(1)="nomaddon2"
etc...

Ensuite pour les recuperer une simple boucle for next!!!!
For i=0 to ubound(nom) 'boucle de nom(0) au dernier
msgbox nom(i) ' affiche nom I
next i

Voila!!!!

Ps: Sinon pour l'erreur "Invalid procedure call or argument " test en remplacant left par left$, car sinon je vois pas pourquoi tu a cette erreur!!! Tien moi au courant !!++
0
ld40
Messages postés
336
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
22 février 2019
1
23 févr. 2004 à 12:41
je vois que tu te casses bien la tête.
En fait il suffisait de mettre

a$ = Replace(a$, vbTab, " ")


à la place de ta boucle az. Car c'est déjà très bien, tu as compris où était le hic. ;-)
0
ld40
Messages postés
336
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
22 février 2019
1
23 févr. 2004 à 12:44
si tu veux plus d'explications sur le code, c'est possible.
Par contre si tu veux comprendre par toi même, n'oublie pas qu'il suffit dans vb6 ou vba de faire clignoter le curseur sur le mot qui te pose probleme et d'appuyer sur F1 pour avoir l'aide ;-)
0
ld40
Messages postés
336
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
22 février 2019
1
23 févr. 2004 à 13:02
Je viens de tester le code de pcpunch.
Il fonctionne aussi chez moi.

L'erreur sur le left, c'est comme s'il avait ouvert un fichier vide. (peut être une erreur dans le chemin?)

En effet si temp="" alors len(temp)=0
et left(temp,-1) provoque une erreur ;-)
0
pcpunch
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
23 févr. 2004 à 13:48
Exact Ld40!!!! j'y avais pas penser !! il doit avoir fait une erreur dans le chemin du fichier!!! Mais la j'y suis pour rien!!
++
0