Tableau à deux dimensions dynomiques

serhoe - 5 juin 2013 à 16:23
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 7 juin 2013 à 13:30
Salut tout le monde,

Ce que je dois faire est simple : j'ai un fichier csv, je dois le lire et mettre tout ce qu'il y a dedans dans un tableau 2D. Cependant je ne connais pas le nombre de lignes et de colonnes de ce fichier csv.

Contenu de du fichier csv pour mon exemple :

val1;1;11
val2;2;22
val3;3;33

J'aimerais donc mettre ça dans un tableau 2D comme :

val1 1 11
val2 2 22
val3 3 33

Pour l'instant j'ai ça :

Const ForReading 1, ForWriting 2 
Dim oFso, f
Set oFso = CreateObject("Scripting.FileSystemObject")
Set f = oFso.OpenTextFile("C:\Users\Monique\Downloads\test.csv", ForReading)
i=0
Dim tab2(2,2)
while Not f.AtEndOfStream 
    SrtLine = f.ReadLine
    Tab = Split(SrtLine,";")
    For j = 0 to UBound(Tab)
tab2(i,j)=Tab(j)
    Next
i=i+1
Wend
f.Close
 
For d=0 to i-1
For e=0 to j-1
MsgBox tab2(d,e)
Next
Next


Ceci marche. Cependant il ne marche que pour un fichier avec 3 lignes et 3 colonnes ^^
Comment le changer pour qu'il marche pour tout type de fichier ?

Merci d'avance :)

8 réponses

cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
5 juin 2013 à 16:33
Salut

tu codes en vb.net ou vb6 ?
0
C'est en VBScript, je sais pas si ça répond à ta question ?
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
5 juin 2013 à 17:56
Bonjour,
à lire et utiliser ===>>
Tapez le texte de l'url ici.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
5 juin 2013 à 18:05
Et si ton fichier n'est pas d'un "poids" trop important, lire également ceci :
Tapez le texte de l'url ici.
(un split de la totalité sur le retour-chariot tr permettrait de connaître d'entrèe de jeu le nombre de lignes de ton fichier).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

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

Posez votre question
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
7 juin 2013 à 08:02
Bonjour, serhoe,
Je mets dans ma mémoire que tu as ici abandonné cette discussion, mais que tu n'as pas hésité à montrer "ailleurs" "ta" solution utilisant le Redim (mon message plus haut du 5 juin 2013 à 17:56:33)
Dont acte (je saurais m'en souvenir).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
7 juin 2013 à 08:17
Ce que ce comportement cavalier t'aura fait perdre, maintenant :
Le code capable de faire cela en UNE SEULE boucle (et non deux, dont l'une pour compter, comme tu as fini par le faire)
Je t'aurais montré cela si tu avais continué ici.
Cela n'a pas été le cas. Et c'est maintenant trop tard.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Salut ucfoutu,

Pour être franc, j'ai davantage suivi les réponses sur developpez.net que sur vbfrance.

Je n'avais pas suivi ton lien concernant le ReDim.

En suite, j'ai rencontré des difficultés pour le mettre en place et pour le coup j'ai tâtonné seul pour trouver la solution. Donc sans vouloir te vexer et t'offenser, tu ne m'as pas aidé, même si c'était sympa de ta part de me donner le lien sur ReDim. Mais les circonstances ont fait que je n'ai pas vu ton message avant de trouver seul la solution.

Const ForReading 1, ForWriting 2 
Dim oFso, f
Set oFso = CreateObject("Scripting.FileSystemObject")
Set f = oFso.OpenTextFile("C:\Users\Monique\Downloads\test.csv", ForReading)
ln=-1
cl=0
 
while Not f.AtEndOfStream '1ère itération pour définir les limites
  ln=ln+1 'définition indice lignes
  Tab=Split(f.ReadLine,";")
  If cl < UBound(Tab) Then cl = UBound(Tab) 
Wend
f.Close
MsgBox "indice lignes : " & ln+1 & "indice colonnes :" & cl+1
 
Dim Tab2()
ReDim Tab2(ln,cl)
Set f = oFso.OpenTextFile("C:\Users\Monique\Downloads\test.csv", ForReading)
i=0
while Not f.AtEndOfStream ' 2ème itération pour remplir le tableau
  Tab = Split(f.ReadLine,";")
  For j = 0 to UBound(Tab)
    Tab2(i,j) = Tab(j)
  Next
  i=i+1
Wend
f.Close
 
MsgBox Tab2(1,1)

Dim fsot, ft   
Set fsot = CreateObject("Scripting.FileSystemObject")
Set ft = fsot.OpenTextFile("C:\Users\Monique\Downloads\lolololololol.txt", 2,true)
m=0

For i=0 to UBound(Tab2,1) ' vérification
For j=0 to UBound(Tab2,2)
If m <> cl Then 
ft.write(Tab2(i,j) & "	")
m=m+1
Else
ft.write(vbcrlf)
m=0
End If
Next
Next


Actuellement ce code lit un fichier CSV, compte le nombre de lignes et de colonnes, crée un tableau dynamique en fonction de la taille du fichier CSV, met tout dans un tableau puis remet tout dans un fichier texte.

Si tu souhaites me transmettre ton code optimisé je t'en serai reconnaissant même si je peux comprendre que tu ne le veuilles pas (que cela soit justifié ou non car je suis innocent dans l'histoire )

D'ailleurs si j'aimerais que tu me donnes ton code optimisé, c'est plus par curiosité de geek que par nécessité absolue car mon code marche, comme tu veux donc !
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
7 juin 2013 à 13:30
Si tu souhaites me transmettre ton code optimisé je t'en serai reconnaissant même si je peux comprendre que tu ne le veuilles pas (que cela soit justifié ou non car je suis innocent dans l'histoire )

D'ailleurs si j'aimerais que tu me donnes ton code optimisé, c'est plus par curiosité de geek que par nécessité absolue car mon code marche, comme tu veux donc !
*
Désolé, mais non.
Question de principe. Un point c'est tout.
Et de toutes manières, comme tu le dis si bien :
c'est plus par curiosité de geek que par nécessité absolue car mon code marche

alors contente-t-en donc.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0