transferer le contenu d'un fichier csv dans une variables tableau

Le
rayan-cooper
Bonjour,
J'ai une application VB6 qui travaille avec des fichiers csv et j'aimerai pouvoir transferer leur contenu dans une variable tableau aux meme dimensions mais sans utiliser exel.
Merci d'avance de votre aide
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #18965631
rayan-cooper wrote:
Bonjour,
J'ai une application VB6 qui travaille avec des fichiers csv et
j'aimerai pouvoir transferer leur contenu dans une variable tableau
aux meme dimensions mais sans utiliser exel.
Merci d'avance de votre aide



Hello,

Tu as normalement tout ce qu'il te faut dans la FAQ.

Tu peux lire le fichier avec ceci:
http://faq.vb.free.fr/index.php?question5

Mais tu peux aussi faire une simple lecture ligne à ligne
(voir dernier lien)

Puis découper tes lignes avec Split(), comme expliqué ici:
http://faq.vb.free.fr/index.php?question8

Pour la partie tableau, tu peux t'inspirer de ceci pour faire
de l'allocation dynamique avec Redim :
http://faq.vb.free.fr/index.php?question3


Tu as un exemple quasi complet ici (exemple 6):
http://faq.vb.free.fr/index.php?question4

Bref, rien de compliqué à priori.

La FAQ contient encore pas mal d'exemples, tu peux consulter
la section fichier et la section chaines de caractères:
http://faq.vb.free.fr/index.php?rubrique

http://faq.vb.free.fr/index.php?rubrique

Bonne suite!

Cordialement;


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
PH
Le #18967461
rayan-cooper a écrit :
Bonjour,
J'ai une application VB6 qui travaille avec des fichiers csv et j'aimerai
pouvoir transferer leur contenu dans une variable tableau aux meme dimensions
mais sans utiliser exel.
Merci d'avance de votre aide


avec split cela doit marcher.



dim S as string, T1(),T2(), nbLignes as integer, nbColonnes as integer

Open Fichier For Input As #1
S = Input(LOF(1), #1)
Close

T1=split(S,vbCrLF)
nbLignes=Ubound(T1)
T2=Split(T1(0),",")
nbColonnes=Ubound(T2)

redim T(0 to nbLignes,0 to nbColonnes)

For I=0 to nbLignes
T(I)=split(T1(I),",")
next I
PH
Le #18967521
PH a écrit :
rayan-cooper a écrit :
Bonjour,
J'ai une application VB6 qui travaille avec des fichiers csv et j'aimerai
pouvoir transferer leur contenu dans une variable tableau aux meme
dimensions
mais sans utiliser exel.
Merci d'avance de votre aide


avec split cela doit marcher.



dim S as string, T1(),T2(), nbLignes as integer, nbColonnes as integer

Open Fichier For Input As #1
S = Input(LOF(1), #1)
Close

T1=split(S,vbCrLF)
nbLignes=Ubound(T1)
T2=Split(T1(0),",")
nbColonnes=Ubound(T2)

redim T(0 to nbLignes,0 to nbColonnes)

For I=0 to nbLignes
T(I)=split(T1(I),",")
next I



Il ya plusieurs erreurs dans le code ci-dessus.

dim S as string, T1() as string,T2() as string,T() as string
dim nbLignes as integer, nbColonnes as integer

mais surtout il faut ajouter tout à la fin du traitement avant de sortir
de la procédure ou du programme : erase T1, T2,T
Jean-marc
Le #18969961
PH wrote:
PH a écrit :



redim T(0 to nbLignes,0 to nbColonnes)

For I=0 to nbLignes
T(I)=split(T1(I),",")
next I



Il ya plusieurs erreurs dans le code ci-dessus.

dim S as string, T1() as string,T2() as string,T() as string
dim nbLignes as integer, nbColonnes as integer



Hello,

Ca ne fonctionne toujours pas, car l'affectation suivante est
incorrecte :
T(I)=split(T1(I),",")

On doit découper T1 et affecter individuellement dans T(x, y)

Voici un exemple simple d'implémentation :

'
' 8<--------------------------------------------------
'
Private Function Decoupe(ByVal fileName As String, _
ByVal separator As String, _
ByRef t() As String, _
ByRef nbLines As Long, ByRef nbCols As Long, _
ByRef errStr) As Boolean

Dim f As Integer
Dim buffer As String
Dim tBuf() As String
Dim tLine() As String
Dim i As Long
Dim j As Long

On Error GoTo Decoupe_ERR

f = FreeFile
Open fileName For Binary As #f
buffer = Space$(LOF(f))
Get #f, , buffer
Close #f

tBuf() = Split(buffer, vbCrLf)
nbLines = UBound(tBuf)
nbCols = UBound(Split(tBuf(0), separator)) + 1

ReDim t(nbLines, nbCols)
For i = 1 To nbLines
tLine() = Split(tBuf(i - 1), separator)
For j = 1 To nbCols
t(i, j) = tLine(j - 1)
Next j
Next i
Decoupe = True

Decoupe_END:
Exit Function

Decoupe_ERR:
errStr = "Erreur " & CStr(Err.Number) & " : " & Err.Description
Resume Decoupe_END
End Function

'
' 8<--------------------------------------------------
'

Et l'utilisation :

Private Sub Command1_Click()
Dim fn As String
Dim sep As String
Dim nL As Long
Dim nC As Long
Dim t() As String
Dim errStr As String
Dim ret As Boolean
Dim i As Long
Dim j As Long


fn = "c:data.txt"
sep = ","

ret = Decoupe(fn, sep, t, nL, nC, errStr)
If ret Then
Debug.Print "Lecture ok, Lignes = " & nL & " colonnes = " & nC
Debug.Print "Tableau lu"
For i = 1 To nL
For j = 1 To nC
Debug.Print t(i, j),
Next j
Debug.Print
Next i
Else
Debug.Print "Erreur lecture : " & errStr
End If

Erase t()

End Sub

Le Erase n'est nécessaire qu'en fonction du contexte: la
mémoire allouée lors de Redim sera de toute façon libérée
par l'OS à la fin de l'exécution du programme.

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Noex
Le #18971001
Jean-marc avait soumis l'idée :


Ca ne fonctionne toujours pas, car l'affectation suivante est
incorrecte :
T(I)=split(T1(I),",")



Si j'ai bien compris ton problème:

T doit être déclaré variant

Par exemple,

Private Sub Form_Load()
Dim t(1) As String
Dim tabl As Variant
Dim i As Integer
t(1) = "antoine,marie"
tabl = Split(t(1), ",")

Debug.Print tabl(0) & " & "; tabl(1)

For i = LBound(tabl) To UBound(tabl)
Debug.Print tabl(i)
Next i

End Sub
Jean-marc
Le #18972641
Noex wrote:
Jean-marc avait soumis l'idée :


Ca ne fonctionne toujours pas, car l'affectation suivante est
incorrecte :
T(I)=split(T1(I),",")



Si j'ai bien compris ton problème:

T doit être déclaré variant



Ce n'était pas mon problème :-)

Je corrigeais le code de PH qui était incorrect, cf.
l'implémentation que je donnais dans la suite du post.

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Noex
Le #18976191
Jean-marc avait soumis l'idée :

Ce n'était pas mon problème :-)

Je corrigeais le code de PH qui était incorrect, cf.
l'implémentation que je donnais dans la suite du post.

Cordialement,



Pardon pour le quotage erroné.
Publicité
Poster une réponse
Anonyme