Placé un fichier csv dans une variable tableau (vb.net)

Résolu
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 - 10 juin 2005 à 12:57
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008 - 10 juin 2005 à 14:29
Bonjour,

J'ai un fichier csv contenant sur une même ligne séparé par des "," des intègres, string, et date je voudrai placer toutes ces données
dans une variable tableau.
Le nombre de colonne reste toujours le même, 6 colonnes.
Le nombre de ligne varie.

Existe il une méthode particulière pour ce faire ou dois je traité chaque ligne avec une boucle ?

Merci

\!/
00
!

8 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
10 juin 2005 à 14:08
j'ai trouvé ca sur msdn :

Sub ReadTextLinesFromFile()
Dim file As New System.IO.StreamReader("c:\test.txt")
Dim oneLine As String
oneLine = file.ReadLine()
While (oneLine <> "")
Console.WriteLine(oneLine)
oneLine = file.ReadLine()
End While
file.Close()
End Sub

En dehors de ca, je serais plutot à conseiller les collections, les arraylist, ou sortedlist afin de mémoriser les données. Pour ma part le top du top c'est le sortedlist. En effet, le Sortedlist apporte une capacité immédiate, tel que le "Add" avec un "obj" et une "key", ce qui permet d'aussitot renseigner.

juste un petit exemple (non tester puisque pas de .net sur le poste actuel)

--Objet contenant tes données au nombre de 6
private structure S_Donne
dim D0 as string
dim D1 as string
dim D2 as string
dim D3 as string
dim D4 as string
dim D5 as string
end structure
private MyList as new sortedlist 'delclaration de ta sortedlist

--- tu as 6 données
dim Chaine as string = "......." ' chaine contenant toute ta ligne
dim Splitchaine() as string = split(chaine,",")

dim i as integer = 0
for i = 0 to ubound(splitchaine)
Dim Donne as S_Donne
with Donne
.D0 = Splitchaine(0).to string
.D1 =Splitchaine(1).to string
.D2 =Splitchaine(2).to string
.D3 =Splitchaine(3).to string
.D4 =Splitchaine(4).to string
.D5 =Splitchaine(5).to string

MyList.add(.D0, Donne) '(key, objet) en imaginant que ton critere principal est .D0
end with
next


--- D'un autre coté si tu as besoin de récupere tel ou tel objet "donne"
------- test si la key existe
if Mylist.containskey("ma1eredonnée") then
dim TakeObject as S_Donne = ctype(mylist("ma1eredonnée") , S_Donne)
' Supposant que tu as des labels
with TakeObject
.D0 = Label1.text
.D1 =Label2.text
.D2 =Label3.text
.D3 =Label4.text
.D4 =Label5.text
.D5 =Label6.text
end with
end if

--- Pour vider la list
MyList.clear

--- Il y a aussi les methodes pour "virer" les données indésirables et plein d'autres choses.

c'est juste un aperçu et je ne sais pas si ca pourra te servir, mais c'est un bon moyen de classer des données sans pour autant passer par les tableaux parfois embetant a gérer.

Bonne prog,
[mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
3
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
10 juin 2005 à 13:04
Je dirais que tu dois charger ligne à ligne avec une boucle

++
Moustachu
0
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 2
10 juin 2005 à 13:31
Merci de votre attention Mr Moustachu,

traitement ligne par ligne dans une boucle OK.

Comment faire pour les colonnes ? elle sont au nombre de 6, je doit faire une recherche de caractère sur la "," pour séparé mes colone dans la variable ou il existe une fonction ?

pour déterminer le nombre de lignes dans le csv j'utilise la fonction (LOF) ou (Length) ?

Pour la variable tableau :
Redim préserve mavariable(x,5)

Encore merci

nouveau en .NT mais quelques expériance en VBA.

\!/
00
!
0
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
10 juin 2005 à 13:51
Ok autant pour moi, j'ai lu trop vite... ça m'arrive trop souvent.



Je ne me souviens pas de fonctions qui te "parse" ta ligne (comme en
PHP par exemple), donc je te suggère de boucler sur ta ligne.
Cependant, quelqu'un a déjà du rencontrer le problème et ça ne
m'étonnerait pas que tu trouves sur le site une fonction qui le fait.



LOF doit te donner la taille en octets (ou bytes je sais pas) de ton
fichier mais pas le nombre de lignes (à moins que chaque ligne soit de
longueur fixe)

POur le nombre de lignes, je ferais un truc dans le genre : http://www.vbfrance.com/code.aspx?ID=45






++
Moustachu
0

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

Posez votre question
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 2
10 juin 2005 à 14:15
Merci liquide,

Bon je vais testé cette méthode.
Je ne dois pas retravailler ces données je dois juste les lires sans plus mais en la passant dans une variable.
Pour en resté avec ma variable tableau, pour ce qui est de séparé mes colonne
j'ai trouvé ceci http://www.vbfrance.com/forum.v2.aspx?ID=434901
avec la méthode "split" je devrais y arrivé plus facilement ?

\!/
00
!
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
10 juin 2005 à 14:18
lol, tu remarqueras que j'utilise aussi le split

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
sacha1435 Messages postés 94 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 octobre 2005 2
10 juin 2005 à 14:20
Hola désolé, je suis comme moustachu je lis trop vite.

En fait je crois que en lisant mieux l'exemple c'est ce qu'il me faut.

Merci
Sacha
\!/
00
!
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
10 juin 2005 à 14:29
petite précision, ne connaissant pas l'interieur de ton csv, la Key est une clé unique, j'ai juste imaginé comme critere, le .D0 comme élément principal et unique. si par ailleur il y avait des doublons , da ce cas précis, ca planterait. Il faurait alors passer le bouclage en prenant la Key le numéro "i" du bouclage, pour eviter les erreurs.

Bonne prog, [mailto:liquide_vaisselle_76@hotmail.fr liquide_vaisselle_76@hotmail.fr]
liquide (Membre "Liquide-Fundation" -- tout ce qui peut etre bu est interdit -- les alcolo sont mals , moi le 1er&n
0
Rejoignez-nous