Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

7 réponses
Avatar
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

7 réponses

Avatar
Jean-marc
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_' ;
Avatar
PH
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
Avatar
PH
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
Avatar
Jean-marc
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_' ;
Avatar
Noex
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
Avatar
Jean-marc
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_' ;
Avatar
Noex
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é.