Tableau et fichier - VB [Résolu]

Signaler
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Bonjour,
En Visual Basic, j'ai un problème.
J'ai crée un tableau où lorsque l'application est lancée, le tableau se remplis avec des formulaires à remplir par l'utilisateur.
j'aimerais enregistrer ce tableau de manière à ce qu'au prochain lancement, toutes les informations entrées à l'ouverture précédentes soient enregistrées. Comme sur une base de donnée.
Y à t'il un moyen d'enregistrer le tableau rapidement sous forme de fichier et de le relire rapidement ?

PS : C'est un tableau à 2 dimentions

16 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,
Le code que tu montres ne modifie que la première ligne de la première colonne d'un tableau. Il ne le "remplit" pas.
Montre ta boucle de remplissage.

De toutes manières, en admettant que ton tableau soit rempli :
il te faut boucler sur ses valeurs et les écrire dans un fichier texte, lequel devra comporter 40 lignes, chaque ligne contenant 5 valeurs (tes 5 colonnes)
Cela se fait par utilisation de l'instruction Open (la voir dans l'aide VB6, accompagnée d'exemple) ... For output ...
La lecture (à l'ouverture d'une nouvelle session) se fera également par utilisation de l'instruction Open ... mais cette fois-ci : For Input.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
15412
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2021
503
Bonjour,
Quelle version de VB?
VBA, VB6, VBS, VB.NET?
Je suis en VB6 :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,
1) j'ai donc déplacé cette discussion vers le forum VB6
2)
le tableau se remplis avec des formulaires à remplir par l'utilisateur
.
se "remplit" de quoi, exactement ? Le code de "remplissage" nous en dira plus long ===>>> montre-le.
J'ai
Dim MAIL0(40, 5) As String
Dim MAIL(40, 5) As String

Pour déclarer mes tableaux.

J'en les remplis 1 et lorsque je clique sur valider, il me remplis l'autre (le bon)
MAIL0(0, 0) = Umail1a.Text

MAIL = MAIL0
Umail1.Text = MAIL(0, 0)


Seulement, je souhaite {enregistrer les valeurs du tableau MAIL} afin de pouvoir les relire directement au lancement de l'application.

Je modifie dans l'app.
A la fermeture : enregistrement ou lors d'un clik sur "valider"
A l'ouverture : le tableau à toujours les anciennes valeurs
Oui effectivement, j'ai utilisé le mot remplir, mais je veux dire que j'affectais une valeur à une case dans le tableau.
Cela plusieurs fois.

Je me dirige donc vers "For output" dans l'aide VB6.

Si jamais je ne trouve pas, je reviens ici :)
Je suis parvenu à écrire le contenu de mon tableau dans un fichier texte !
Mais je ne parviens pas à le reformuler sous forme de tableau VB ...
J'ai pour chaque ligne du tableau une ligne dans le fichier texte et pour chaque colone du tableau un séparateur "|" ;)
Donc :
aaa|BBB|ccc|ddd|eee
etc.|etc2.| .....
Comment récupérer chaque valeur entre les "|" et les disposer dans un tableau sans écrire le code pour chaque ligne (40 lignes ... )
merci de ton aide ! :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Montre par quel code tu as écrit ce fichier (toute la boucle). Car la lecture dépend de l'écriture.
Dim file As System.IO.StreamWriter
Dim mywriteline As String
Dim i As Integer
'Ouverture du fichier en écriture, en effaçant les lignes existantes.
file = My.Computer.FileSystem.OpenTextFileWriter(My.Computer.FileSystem.CurrentDirectory & "\tarif.txt", False)
'écriture ligne par ligne
ligne = ""
Do Until i > 38
ligne = MAIL(i, 0) & "|" & MAIL(i, 1) & "|" & MAIL(i, 2) & "|" & MAIL(i, 3) & "|" & MAIL(i, 4)
file.WriteLine(ligne)
i = i + 1
Loop
file.Close()

Et si il y à un moyen de faire un double boucle pour écrire le fichier, je vous écoute :)
Messages postés
15412
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2021
503
Bonsoir, on ne fait une boucle à compteur avec Do (Until ou While), mais avec For.

Et oui tu peux faire une boucle dans une boucle

For i = 0 to n
  For j = 0 to m
    'code à faire
   next j
next i
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Tu t'embarrases beaucoup pour peu. Et ta manière t'obligerait à faire un split !

Regarde ce petit test vite fait (bâclé)

un form et deux boutons (le 1er pour écrire, le second pour lire) ===>>

Dim toto(2, 2) As String

Private Sub Command1_Click()
' juste pour se faire un petit tableau de test
For i = 0 To 2
For j = 0 To 2
toto(i, j) = "a" & i & j
Next
Next


'on l'écrit
Open "d:\essai.txt" For Output As #1
For i = LBound(toto) To UBound(toto)
Write #1, toto(i, 0), toto(i, 1), toto(i, 2)
Next
Close #1

End Sub

Private Sub Command2_Click()

'preuve =====
Erase toto ' pas nécessaire. Juste pour prouver
Open "d:\essai.txt" For Input As #1
For i = LBound(toto) To UBound(toto)
Input #1, toto(i, 0), toto(i, 1), toto(i, 2)
Next
Close #1

'preuve
For i = 0 To 2
For j = 0 To 2
MsgBox toto(i, j)
Next
Next

End Sub


Voilà une méthode parmi d'autres. Prends déjà celle-ci

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
9
Date d'inscription
vendredi 24 janvier 2014
Statut
Membre
Dernière intervention
17 juin 2015

J'ai réussis à trouver une solution !
        Dim filer As System.IO.StreamReader
Dim myreadline As String
Dim j As Integer
Dim col(4) As String
Dim k As Integer

filer = My.Computer.FileSystem.OpenTextFileReader(My.Computer.FileSystem.CurrentDirectory & "\tarif.txt")
Do Until k > 38
myreadline = filer.ReadLine
col = Split(myreadline, "|")
Do Until j > 4
MAIL(k, j) = col(j)
j = j + 1
Loop
k = k + 1
Loop

J'utilisais déjà i pour l'écriture, je n'ai pas osé le réutiliser :)
En gros j'ai récupéré tout le fichier texte en un seul bloc et j'ai lu ligne par ligne dedans.

Merci pour ton aide :)
Bonne soirée ! Sujet Résolut :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Hep là !!!!
Quand je lis :
filer = My.Computer.FileSystem.OpenTextFileReader(My.Computer.FileSystem.CurrentDirectory & "\tarif.txt")

Je me dis qu'il y a un sacré problème et que tu ne développes pas dans le langage correspondant à ce forum (VB6), mais en VB.Net !!!!
On peut savoir sous quoi tu développes, finalement ?
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
15412
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 janvier 2021
503
Bonsoir Uc, cette ligne c'est du VB.Net c'est certain.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonsoir, Whismeril,
Et cela ne l'a pas empêché de répondre (plus haut) à ta question par :
Théo 15 juin 2015 à 14:34
Je suis en VB6 :)

Bah ... Il existait une solution VB6 avec double boucle For to Next, mais plus la peine, donc ...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Voilà quand même une autre solution VB6 (elle doit être facilement transposable en VB.Net)
celle-ci utilise Print et non Write et est valable quelles que soient les deux dimensions du tableau. L'astuce est dans la multiplication de la première dimension par la seconde, puis un step de la seconde et enfin une division de i par la seconde (arithmétique pure) ==>> exemple
Dim toto(4, 3) As String

Private Sub Command1_Click()
' juste pour se faire un petit tableau de test
For i = 0 To UBound(toto, 1)
For j = 0 To UBound(toto, 2)
toto(i, j) = "a" & i & j
Next
Next

'on l'écrit
Open "d:\essai.txt" For Output As #1
For i = LBound(toto, 1) To UBound(toto, 1)
For j = LBound(toto, 2) To UBound(toto, 2)
Print #1, toto(i, j) '====>> ici : le Print et plus le Write
Next
Next
Close #1

End Sub

Private Sub Command2_Click()

'preuve =====
Erase toto ' pas nécessaire. Juste pour prouver
Open "d:\essai.txt" For Input As #1
' et maintenant : de l'arithmétique +++>>
For i = 0 To UBound(toto, 1) * UBound(toto, 2) Step UBound(toto, 2)
For j = 0 To UBound(toto, 2)
Input #1, toto(i / UBound(toto, 2), j) ' ah ! cette belle division (MDR)
Next
Next
Close #1

'preuve
For i = 0 To UBound(toto, 1)
For j = 0 To UBound(toto, 2)
MsgBox toto(i, j)
Next
Next

End Sub

Pas de split. Pas d'ajout de séparateur.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

Si c'est en vb.net tu as le settings