[VB6]Ecrire dans un fichier organisé [Résolu]

Signaler
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008
-
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
-
Bonjour a tous,

J'ai déja posté a propos des fichiers texte pour en savoir un petit peu
plus, mais la j'ai une demande bien particuliére et je ne trouve nulle
part comment faire.

Voila mon fichier texte :

#Port COM

(numero du port)

#Nombre d'entrees

(nombre d'entrées)

#Nombre de sorties

(nombre de sorties)

#Nom des entrees,numero des entrees,label

entree1,1,gestion d'une pompe

entree2,2,gestion de patatra

.

.

.

#Nom des sorties,numero des sorties, label

idem que pour les entrées


Je souhaiterai pouvoir modifier ce fichier a partir d'un menu d'option,
mais je ne vois pas comment fair pour avoir acces a telle o telle ligne
du fichier, comment écraser ce qu'il y'avait a la place enfin voila je
ne vois vraiment pas par ou commencer...et puis comment lire telle ou
telle ligne par la suite pour l'affichage de mon interface..

J'ai essayé output et print mais ca m'ecrase tout le fichier...

Merci de votre aide

14 réponses

Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
fichtrans = chmBEH & "transit.beh"
chmBEH est une variable qui contient le chemin du fichier  et transit.beh est le nom de mon fichier
je n'ai fait qu'un copier/coller d'un bout de code d'un de mes programmes
tu peux donc le remplacer par ce que tu veux
du genre
fichtrans = "c:\ test.text"
en effet le write est bien l'opération d'écriture qui dans ma sub écrase l'ancien fichier
il faut donc commencer par la deuxieme sub qui elle lit le fichier texte et le met dans le tableau.
ensuite on fait dans ce tableau toutes les manipes que l'on veut
puis ensuite on réécrit le tableau modifié dans le fichier texte avec la premiere sub

c'est vrai qu'en toute logique j'aurais du écrire la sub de lecture avant  celle d'écriture

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
pour moi la solution est d'écrire ton fichier dans un tableau  puis une fois les modifications faites de réécrire ton fichier depuis ce tableau

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

Peux tu me donner un exemple? je ne vois pas trop ce que tu veux dire par ecrire un tableau?
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
Public Sub ecrittransit()
    
    fichtrans = chmBEH & "transit.beh"
    Open fichtrans For Output As #1
        For I = 0 To UBound(TabTrans, 2)
            For j = 0 To UBound(TabTrans, 1)
                If j = UBound(TabTrans, 1) Then
                    Write #1, Trim(TabTrans(j, I))
                Else
                    Write #1, Trim(TabTrans(j, I)),
                End If
            Next j
        Next I
    Close #1
   
End Sub

Public Sub littransit()

    fichtrans = chmBEH & "transit.beh"      ' mets dans la variable le chemin et le nom du fichier
    On Error Resume Next
    test = Dir(fichtrans, vbDirectory)
    If Err <> 0 Then GoTo FinEcritTransit
    If test = "" Then GoTo FinEcritTransit
    ReDim TabTrans(20, 0)
   
    Open fichtrans For Input As #1             'ouvre le fichier transit.beh en lecture
    Do While Not EOF(1)                         'boucle jusqu'à la fin du fichier
        For I = 0 To 20
            Input #1, TabTrans(I, UBound(TabTrans, 2))
        Next I
        ReDim Preserve TabTrans(20, UBound(TabTrans, 2) + 1) 'agrandit le tableau d'une ligne
    Loop
    Close #1
    ReDim Preserve TabTrans(20, UBound(TabTrans, 2) - 1) 'supprime la derniere ligne créée en trop
Exit Sub
FinEcritTransit:
    Err.Clear
    ecrittransit
End Sub

voici un exemple qui lit  et /ou ecrit un fichier texte qui se présente sous la forme
"texte", "texte","texte"
"texte", "texte","texte"
si tu le lis avec le notepad

ce que j'ai mis en rouge c'est pour le cas où, en lecture, le fichier n'existerais pas

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

Comme j'aime avant tout comprendre ce que je fais, j'aimerai te demander deux ou trois petites choses sur ce code:

fichtrans chmBEH & "transit.beh" > qu'est ce que chmBEH &????

Write #1, Trim(TabTrans(j, I)) => Ca veut dire qu'on écrit par dessus ce qu'il y'avait écrit?

Pourquoi les deux boucles FOR?

Que stocke tu dans ton tabtrans?

Déja ca m'aidera a mieux comprendre ce code :)

Désolé mais je ne suis pas encore tout a fait a l'aise avec le vb...

Merci beaucoup
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

Ton idée de tableau est super, je comprend mieux maintenant ^^

Bon je vais tester ca j'accepte ta réponse, mais peut etre que si j'ai encore des probléme a le mettre en oeuvre je posterai...

En tout cas grand merci tu m'as bien aidé ;)
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

Peux tu juste me donner la déclaration de ton tabtrans sil te plait ?
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
public tabtrans() as string

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

C'est un tableau a deux dimensions??
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
oui
 mais rien ne t'empeche à partir de la d'en faire un à une seule dimmension  en fonction de tes besoins

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

J'execut ce code dans ma "form" et il  me met une erreur de type "
indice en dehors de la plage" je comprend pas pourquoi...

Private Sub Command1_Click()

Call mil.littransit

For i = 0 To 20

    tabtrans(i) = Text2(i).Text

Next [i]

Call mil.ecrittransit

End Sub


Private Sub Form_Load()

End Sub
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
si ton tableau est resté à deux dimmensions ça devrait être du style tabtrans(i, x)
de plus utilise plutot si tu incrémente par rapport au tableau
for i = 0 tu ubound(tabtrans,1)
ou
for i = 0 tu ubound(tabtrans,2)
suivant que tu veux exporer la colone ou la rangée du tableau
si il n'a qu'une dimmension ce sera
for i = 0 tu ubound(tabtrans)

maintenant ton Text2(i) peut également être la cause du probleme
est ce bien un groupe de controle et combien il y en a ?
car dans ce cas  si il y en as moins de vingt ça plante fort logiquement
ta boucle for doit alors etre faite par rapport à l'index de ton text2
si par exemple tu as textbox2(0), textbox2(1),textbox2(2)
ce sera
 for i = 0 to 2

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
38
Date d'inscription
dimanche 4 juin 2006
Statut
Membre
Dernière intervention
28 mai 2008

C'est bon finalement je m'en suis sorti!!!

J'aurai voulu savoir aussi, esqu'il est possible de rajouter des
commentaires dans le fichier texte? genre on met des #, on compare le #
avec le texte et si il detecte un diéze il n'écrit pas ou un truc du
genre?
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
ça doit être possible en effet
mais je pense qu'il est plus simple de considérer le fichier texte comme n'étant que des données   un commentaire n'étant qu'une donnée parmi tant d'autres
j'avais fait un truc de ce genre avec un tableau contenant 20 colones alors que je n'en avais besoin que de 12 et dans la vingtieme je mettais un caractere de controle.
par contre évite le # comme caractere de controle car il est utilisé par VB6  et tu risque d'avoir des erreurs difficiles à trouver

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE