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

reconnaître des colonnes dans un document texte

6 réponses
Avatar
oualaléreur
Je cherche =E0 importer des donn=E9es d'un document texte dans une table.
Je ne dispose pour l'instant dans ma base que du lien vers le document
en question, lien contenu dans une textbox.
Je ne veux pas visualiser le document, mais r=E9cup=E9rer les trois
premi=E8res "colonnes" pour les ins=E9rer dans trois des champs d'une
table d=E9di=E9e.
La difficult=E9 vient de ce que la s=E9paration entre les diff=E9rentes
"colonnes" est repr=E9sent=E9e par un espace. ( du coup, ca ne fait pas
du tout des colonnes, la taille des champs =E9tant al=E9atoire.)

J'avais pens=E9 utiliser TransferSpreadsheet, mais si j'ai bien compris,
ca ne s'applique qu'aux documents excel.
je ne sais pas si il existe une fonction ou une facon de faire
particuli=E8re, si oui, merci de m'en faire part.

cordialement,

benoit

6 réponses

Avatar
oualaléreur
J'ai essayé avec DoCmd.TransferText (acImportDelim, , "Tbl_ADHock",
"LK_LOM",True), mais j'obtient un message d'erreur : "expected:="
Est-ce la bonne voie ? Qu'est-ce que j'ai fait de travers ?
Avatar
3stone
Salut,

"oualaléreur"
Je cherche à importer des données d'un document texte dans une table.
Je ne dispose pour l'instant dans ma base que du lien vers le document
en question, lien contenu dans une textbox.
Je ne veux pas visualiser le document, mais récupérer les trois
premières "colonnes" pour les insérer dans trois des champs d'une
table dédiée.
La difficulté vient de ce que la séparation entre les différentes
"colonnes" est représentée par un espace. ( du coup, ca ne fait pas
du tout des colonnes, la taille des champs étant aléatoire.)



Tu peux utiliser une fonction comme la suivante :

Function LireTexte(sFile, iColonne)
'
' Syntaxe : LireTexte "C:Test.txt"
'
Dim vLigne As Variant
Dim f As Integer, i As Integer
Dim sLigne As String

If Dir(sFile) = "" Then
MsgBox "Fichier ou chemin incorrect!"
Exit Function
End If

f = FreeFile
Open sFile For Input As #f
Do Until EOF(f)
Input #f, sLigne
vLigne = Split(sLigne, " ")
For i = 0 To iColonne
Debug.Print vLigne(i)
Next i
Loop
Close #f

End Function


en aménageant la partie boucle sur le "debug.print"

Et t'aider de ceci pour pousser les données dans une table:
http://www.3stone.be/access/articles.php?lng=fr&pg5


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
oualaléreur
Salut Pierre,

Merci pour ces précieux conseils. J'ai finalement créé une fonction
avec les deux que tu m'as indiquées. Elle est sensée me permettre de
récupérer les trois premières colonnes du document pointé par
"sfile" et de les transférer dans la table
"TableBassePourApéroSympa". La lecture des données s'effectue
correctement .
Le problème, semble-t-il, vient du délimiteur dans la fonction Split.
En fait d'espaces (reconnus par Access, eux), les délimiteurs dans mon
document sont des tabulations. Je sais bien que la question est très
précise, mais apparemment je n'ai pas le choix, le document est en
provenance directe d'orcade.

Pourquoi la fonction Split ne reconnaît-elle pas les tabulations? Y
a-t-il une syntaxe particulière ?
Je colle mon code au cas où, sachant que j'en fournirai un mieux quand
ca tournera.
Une dernière chose, j'ai attribué à sfile le contenu d'un champ
hyperlink, il parraît que ca peut poser problème... C'est pas ca
quand même..

Merci et a+

Benoit



Function PutInTableBassePourApéroSympa(sfile As String)

If Dir(sfile) = "" Then
MsgBox "Fichier ou chemin incorrect!"
Exit Function
End If

Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim F As Integer, i As Integer, iColonne As Integer
Dim txtLine As String
Dim vLigne As Variant


Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("TableBassePourApéroSympa", dbOpenDynaset)
F = FreeFile
Open sfile For Input As #F

Line Input #F, txtLine

Do While Not EOF(F)

Line Input #F, txtLine

vLigne = Split(txtLine, " ", 3, 1)


rst.AddNew
rst![Nomchamp1] = vLigne(0)
rst![Nomchamp2] = vLigne(1)
rst![Nomchamp3] = vLigne(2)
rst.Update

Loop

Close #F
rst.Close
Set dbs = Nothing
Set rst = Nothing

End Function
Avatar
3stone
Salut,

"oualaléreur"
[...]
Le problème, semble-t-il, vient du délimiteur dans la fonction Split.
En fait d'espaces (reconnus par Access, eux), les délimiteurs dans mon
document sont des tabulations. Je sais bien que la question est très
précise, mais apparemment je n'ai pas le choix, le document est en
provenance directe d'orcade.
Pourquoi la fonction Split ne reconnaît-elle pas les tabulations? Y
a-t-il une syntaxe particulière ?


Regarde le second paramètre de la fonction Split()
il permet de spécifier le séparateur... essaies :

vLigne = Split(txtLine, chr(9), 3, 1)



Une dernière chose, j'ai attribué à sfile le contenu d'un champ
hyperlink, il parraît que ca peut poser problème... C'est pas ca
quand même..


heu... sFile désigne le nom du fichier...

je ne comprends pas comment tu lui attribue "un champ hyperlink" ?


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
oualaléreur
Génial. La table se remplie. Un détail, pour avoir trois champs, il
faut écrire
vLigne = Split(txtLine, chr(9), 4, 1)
Sans cela, tout le reste de la ligne est attribué à vLigne(2), et
rst![Nomchamp3] ne se remplit pas (problème de format, mais
l'information est éronnée de toutes facons).
Je pense qu'il faut que la fonction Split considère quatre champs pour
prendre en compte trois séparateurs.

Dans sFile, il y a le chemin menant au fichier :
"C:UserDatavrignonColibryHVIMPORT.BOM"
Je voulais juste signaler qu'il apparaissait dans le formulaire comme
un lien hyperlink, mais en fait, en double-cliquant, il n'ouvre pas le
document, et je ne vois cette propriété nulle part ( en même temps,
c'est en allemand, je comprends rien ). en tous cas ca marche avec le
chemin dans sFile.

Hésites pas à me dire si tu penses qu'une version plus générale
(qui récupère tout le document par exemple) serait utile sur le
forum, je dois pouvoir faire ca, maintenant. sinon, le reste du code
n'a pas changé.


Merci beaucoup et à plus

Benoit
Avatar
3stone
re,

"oualaléreur"
Génial. La table se remplie. Un détail, pour avoir trois champs, il
faut écrire
vLigne = Split(txtLine, chr(9), 4, 1)
Sans cela, tout le reste de la ligne est attribué à vLigne(2), et
rst![Nomchamp3] ne se remplit pas (problème de format, mais
l'information est éronnée de toutes facons).


en fait, écrire

vLigne = Split(txtLine, chr(9))

suffit...



--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/