Importation d'un fichier.txt servant de mini base de données (séparateurs ";") dans un tableau de variables.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 111 fois - Téléchargée 27 fois

Contenu du snippet

tout est dans le titre ;)

le but est d'importer dans un tableau une base de donnée stockée sur un fichier .txt avec des retours à la ligne et des séparateurs (dans ce cas des points virgule). Ca marche si la base de donnée n'est pas trop importante (dans mon cas il y aura 300 lignes au plus). au dela il doit faloir créer des bases de données plus solides. ça a l'avantage de ne pas être galère à installer sur un serveur intranet par contre.

Source / Exemple :


Private Sub import()
'auteur Gnieark, le cri du cochon fou!

Dim ligne, x As Integer
ligne = 1
Dim filename, prout As String
filename = "G:\gestion doc en prgramation\haha.txt"
Dim docligne() As String
Dim table(1 To 1000, 1 To 50) As String

Open filename For Input As #1

While Not EOF(1)

    Line Input #1, prout
   
    docligne = Split(prout, ";")
    x = 1
    For Each elem In docligne
      table(ligne, x) = elem
      x = x + 1
    Next elem

    ligne = ligne + 1
Wend

Close #1

End Sub

Conclusion :


dans mon cas c'est la base pour transphérer la macro excel servant d'interface à la gestion documentaire sur un .exe (arrivée de Open office oblige)

A voir également

Ajouter un commentaire

Commentaires

jean_marc_n2
Messages postés
170
Date d'inscription
jeudi 11 décembre 2003
Statut
Membre
Dernière intervention
24 janvier 2009
-
=> Inutile d'ajouter une variable pour retourner le nombre de lignes.

Au retour de la fonction, il suffit de faire:

Dim r As Boolean, szErr As String
Dim t() As String
Dim nb_lignes as long, nb_champs as long

r = ImportTxtFile("c:\test.dat", ";", t(), szErr, 1)

' RECUP NOMBRE LIGNES
nb_lignes = Ubound(t(), 1)

Tu peux aussi récupérer le nombre de champs:
nb_champs = Ubound(t(), 2)
gnieark
Messages postés
53
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
22 octobre 2010
-
j'ai réussi à intégrer ta fonction dans mon code, ça y est!
gnieark
Messages postés
53
Date d'inscription
jeudi 17 août 2006
Statut
Membre
Dernière intervention
22 octobre 2010
-
po mal merci.

pour la suite je vais tenter d'intégrer à ta fonction une variable contenant le nombre de lignes du texte.

Si j'y arrive pas j'appellerai à l'aide ;)
jean_marc_n2
Messages postés
170
Date d'inscription
jeudi 11 décembre 2003
Statut
Membre
Dernière intervention
24 janvier 2009
-
Hello,

gnieark => Pour préserver ton tableau, il suffit que celui ci soit déclaré ailleurs que dans ta fonction.

VOici un exemple d'amélioration pour ta Sub:
- C'est maintenant une fonction qui retourne un booléen (True si tout va bien, False en cas d'erreur)
- Elle prend en paramètre le nom de fichier, le séparateur à utiliser, le tableau (qui sera alooué dynamiquement), une variable pour mettre le code d'erreur au cas ou (fichier non trouvé par exemple), et en option une variable permettant de commencer à remplir ton tableau à l'indice voulu (en général 0 ou 1).

Private Function ImportTxtFile(ByVal fileName As String, _
ByVal separator As String, _
ByRef tData() As String, _
ByRef errorString As String, _
Optional ByVal baseArray As Integer = 1) As Boolean
Dim f As Integer
Dim tLine() As String
Dim tSplit() As String
Dim buffer As String
Dim nbItem As Long
Dim i As Long, j As Long

On Error GoTo ImportTxtFile_ERR

f = FreeFile()
Open fileName For Binary As #f
buffer = Space$(LOF(f))
Get #f, , buffer
Close #f
tSplit() = Split(buffer, vbCrLf)
nbItem = UBound(Split(tSplit(0), separator)) + baseArray

ReDim tData(UBound(tSplit()) + baseArray, nbItem)

For i = LBound(tSplit()) To UBound(tSplit())
tLine = Split(tSplit(i), separator)
For j = LBound(tLine) To UBound(tLine)
tData(i + baseArray, j + baseArray) = tLine(j)
Next j
Next i
ImportTxtFile = True

ImportTxtFile_END:
Exit Function

ImportTxtFile_ERR:
errorString = Err.Description
Resume ImportTxtFile_END
End Function

Un exemple d'appel:

Private Sub Command2_Click()
Dim r As Boolean, szErr As String
Dim t() As String

r = ImportTxtFile("c:\test.dat", ";", t(), szErr, 1)

End Sub

Avantages:
- Tout est passé en paramètres, plus rien de hard-codé dans la "Sub"
- L'allocation du tableau est dynamique, aussi bien pour les lignes que pour les colonnes: tu peux lire n'importe quel fichier, de n'importe quelle taille, le code est toujours valable
- La lecture en bloc est très rapide
- C'est une vraie fonction, utilisable de façon autonome.

Au final, ça charge un fichier de 20000 lignes avec 7 champs par lignes en 0,4 seconde.

Bonne suite :-)
cs_asimengo
Messages postés
281
Date d'inscription
jeudi 24 mars 2005
Statut
Membre
Dernière intervention
18 mars 2009
-
@Bouv: Je vais l'uploader dès que possible, mais il faudrait que je le retouche un peu, il s'agissait de ma première source et j'avais encore beaucoup à apprendre en VB.

Au fait vu ton niveau très appréciable pourras-tu me faire des remarques et suggestions pour son amélioration?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.