Tableau et fichier - VB

Résolu
Théo - 15 juin 2015 à 12:47
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 16 juin 2015 à 10:29
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/06/2015 à 16:04
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.
1
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
15 juin 2015 à 13:14
Bonjour,
Quelle version de VB?
VBA, VB6, VBS, VB.NET?
0
Je suis en VB6 :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2015 à 14:40
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.
0

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

Posez votre question
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
0
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 :)
0
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 ! :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2015 à 17:52
Montre par quel code tu as écrit ce fichier (toute la boucle). Car la lecture dépend de l'écriture.
0
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 :)
0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
15 juin 2015 à 21:28
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/06/2015 à 18:12
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.
0
Ptitfils Messages postés 9 Date d'inscription vendredi 24 janvier 2014 Statut Membre Dernière intervention 17 juin 2015
15 juin 2015 à 18:41
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 :)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/06/2015 à 19:02
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.
0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 656
15 juin 2015 à 21:24
Bonsoir Uc, cette ligne c'est du VB.Net c'est certain.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2015 à 22:36
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 ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/06/2015 à 23:06
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 juin 2015 à 10:29
Bonjour

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

0
Rejoignez-nous