Importer une partie d'un fichier texte [Résolu]

7nico7 19 Messages postés mardi 26 octobre 2004Date d'inscription 30 janvier 2006 Dernière intervention - 21 déc. 2005 à 19:04 - Dernière réponse : 7nico7 19 Messages postés mardi 26 octobre 2004Date d'inscription 30 janvier 2006 Dernière intervention
- 22 déc. 2005 à 12:42
Bonjour à tous,
voila j'ai un dossier contenant des centaines de fichiers .txt , dans chacun d'eux il y a une ligne nommée "id_menu=quelque chose" (sans les guillemets)
Donc "id_menu" est toujours le même pour chaque fichier .txt et le "quelque chose " change a chaque fois, je désire donc automatiser en VBA l'import de cette ligne dans une table ACCESS avec :
champ1 : le nom du fichier .txt
champ2 : le "quelque chose"

j'ai pas mal cherché les imports des fichiers mais ceci :

Sub import()
Dim Fic As String
Fic = Dir("C:\66\*.txt")
Do While Fic <> ""
DoCmd.TransferText acImportDelim, "spec", "ma_table", "C:\66" & Fic
Fic = Dir
Loop
End Sub

(dans spec j'indique la specification d'import de séparateur de champ par: =)

renvoie tout le contenu de tous les fichiers (dieu que c long), j'ai bien un resultat apres a l'aide d'une requète sur ma table de tous les champs nommés "id_menu" mais je voudrais appliquer le filtre dès l'import.

Merci pour votre coup de main.
Nico
Afficher la suite 

6 réponses

Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 22 déc. 2005 à 05:06
3
Merci
salut,



je fais pas de VBA donc voici l'exemple en VB6 (fonctionnel).

peut-être que ton code est bon aussi (j'ai un doute quand même ^^) mais la plus grande erreur est l'écriture dans le fichier #2.

tu fais un OutPut, donc une écriture, alors qu'il faut faire un Append.




Option Explicit

'

Private Sub Command1_Click()

Call Import

End Sub

'

'

Private Sub Import()

Dim Fic As String, texte As String

Fic = Dir ("C:\66\*.txt")



Do While Fic <> ""

Open "C:\66" & Fic For Input As #1

Do While Not EOF(1)

Line Input #1, texte

If Left$(texte, 12) = "ID_MENUNAME= " Then

Open "C:\liste.txt" For Append As #2

Print #2, texte

Debug.Print Fic & " -> " & Trim$(Right$(texte, Len (texte) - 12))

Close #2

Exit Do

End If

Loop

Close #1

Fic = Dir

Loop

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>



++

PCPT [AFCK]

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 21 déc. 2005 à 19:56
0
Merci
Salut
"le filtre dès l'import" : je vois pas trop
Et il y a quoi dans ta DoCmd.TranferText ?
S'il faut gagner du temps, c'est dans cette fonction .... mais en l'absence d'info ...
- Ouvrir le fichier
- Lire chaque ligne du fichier jusqu'à trouver la ligne qui t'intéresse
- Ensuite, découper la ligne pour en extraire tes deux champs
- Abandonner la lecture de la fin du fichier (si une seule ligne "id_menu" par fichier)
- Fermer le fichier
- Insérer ces données dans la table

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
7nico7 19 Messages postés mardi 26 octobre 2004Date d'inscription 30 janvier 2006 Dernière intervention - 22 déc. 2005 à 01:04
0
Merci
salut,
alors merci de me donner une piste, la structure :

- Ouvrir le fichier
- Lire chaque ligne du fichier jusqu'à trouver la ligne qui t'intéresse
- Ensuite, découper la ligne pour en extraire tes deux champs
- Abandonner la lecture de la fin du fichier (si une seule ligne "id_menu" par fichier)
- Fermer le fichier
- Insérer ces données dans la table

me semble bonne a part qu'il existe plusieurs instances de "id_menu" par fichier.
je vais trouver la traduction de ceci en code
(si vous y arrivez plus vite que moi n'hésitez pas )
merci
Nico
7nico7 19 Messages postés mardi 26 octobre 2004Date d'inscription 30 janvier 2006 Dernière intervention - 22 déc. 2005 à 03:39
0
Merci
Alors voila j'ai trouvé une petite variante , j'extrait d'abord tout ce qui m'interesse (id_menuname) de mes fichiers texte dans un seul autre fichier texte (liste.txt) dont j'importerai les données par la suite manuellement :

Sub import()
Fic = Dir("C:\66\*.txt")
Do While Fic <> ""
Open "C:\66" & Fic For Input As #1
Fic = Dir
While Not EOF(1)
Line Input #1, texte
If Left$(texte, 12) = "ID_MENUNAME=" Then
Open "C:\liste.txt" For Output As #2
Print #2, texte
Close #2
End If
Wend
Close #1
Loop
End Sub
et voici le contenu de 2 fichiers texte differents situés dans C:\66\
Absc.txt :
ID_CLARK=For the Single Text
ID_CODENAME=ATC 3
ID_LOCATION=Facilities
ID_MENUNAME=Hypernation >>>>>>>>>> à extraire
ID_NEWSWIRE=For the Single Text
et Decal.txt :
ID_CLARK=Nothing Important
ID_CODENAME=99 Complex
ID_DATETIME=By [99]-RedBeta
ID_LOCATION=
ID_MENUNAME=Complex >>>>>>>>>> à extraire
ID_MISSION_ORDER=For the Single Text
etc
mais dans mon liste.txt ça ne renvoie que le id_menuname du Decal.txt et pas le reste.
de plus j'aimerais avoir le nom du fichier dont la donnée est extraite :
liste.txt :
Absc.txt=ID_MENUNAME=Hypernation
Decal.txt=ID_MENUNAME=Complex
etc..
J'espère que c clair et que j'en demande pas trop.
Nico ( VBnovice)
7nico7 19 Messages postés mardi 26 octobre 2004Date d'inscription 30 janvier 2006 Dernière intervention - 22 déc. 2005 à 12:05
0
Merci
Meci pcpt,
ton code marche très bien , seulement il n'ajoute pas le nom du fichier au début mais ce doit être une erreur de syntaxe.
Merci à tous pour votre aide.
Nico
7nico7 19 Messages postés mardi 26 octobre 2004Date d'inscription 30 janvier 2006 Dernière intervention - 22 déc. 2005 à 12:42
0
Merci
Voici le code corrigé :

Private Sub Import()
Dim Fic As String, texte As String
Fic = Dir("C:\66\*.txt")


Do While Fic <> ""
Open "C:\66" & Fic For Input As #1
Do While Not EOF(1)
Line Input #1, texte
If Left$(texte, 12) = "ID_MENUNAME=" Then
Open "C:\liste.txt" For Append As #2
Print #2, Fic + "=" + texte
Close #2
Exit Do
End If
Loop
Close #1
Fic = Dir
Loop
End Sub

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.