OVH Cloud OVH Cloud

Import d'un fichier type texte mais sans délimiteur

4 réponses
Avatar
Thierry
Bonjour,
J'ai lu avec intérêt le sujet "Import CSV"ci dessous, et je suis confronté à
un cas similaire.
Je voudrais exporter vers une base Access un fichier de type texte avec les
caractéristiques suivantes:
- chaque ligne fait exactement 240 caractères
- une donnée occupe toujours le même emplacement et a un nombre fixe de
caractères complété par des espaces le cas échéant (par ex.: le nom commence
toujours au 26ème caractère et occupe toujours 40 caractères)
- les montants sont sur 10 caractères, sachant que les 2 derniers sont les
centimes.
- il y a environ 800 lignes par fichier

Peut-on extraire les données du fichier vers une base Access afin de les
exploiter plus facilement ?

4 réponses

Avatar
Jean-Marc
"Thierry" <@ a écrit dans le message de
news:
Bonjour,
J'ai lu avec intérêt le sujet "Import CSV"ci dessous, et je suis confronté


à
un cas similaire.
Je voudrais exporter vers une base Access un fichier de type texte avec


les
caractéristiques suivantes:
- chaque ligne fait exactement 240 caractères
- une donnée occupe toujours le même emplacement et a un nombre fixe de
caractères complété par des espaces le cas échéant (par ex.: le nom


commence
toujours au 26ème caractère et occupe toujours 40 caractères)
- les montants sont sur 10 caractères, sachant que les 2 derniers sont les
centimes.
- il y a environ 800 lignes par fichier

Peut-on extraire les données du fichier vers une base Access afin de les
exploiter plus facilement ?



Hello,

oui on peut et c'est simple:

1/ créer une table access avec les champs correspondants au modèle
d'enregistrement

2/ écrire une fonction qui découpe chaque ligne en champs
ici très simple, car les enregistrements sont de longueur fixe,
on récupérera chauqe champ avec un Mid$() adéquat

Ecrire aussi les fonctions utiles pour les conversions, par exemple
pour les montants

3/ insérer les records au fur et à mesure dans la table access, en utilisant
la méthode de ton choix: ADO ou DAO, avec .Addnew ou avec des execute
INSERT ...

N'hésite pas à demander des infos complémentaires si nécessaire.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Thierry
"Jean-Marc" a écrit dans le message de news:
42ea0dbc$0$14639$
"Thierry" <@ a écrit dans le message de
news:
Bonjour,
J'ai lu avec intérêt le sujet "Import CSV"ci dessous, et je suis
confronté


à
un cas similaire.
Je voudrais exporter vers une base Access un fichier de type texte avec


les
caractéristiques suivantes:
- chaque ligne fait exactement 240 caractères
- une donnée occupe toujours le même emplacement et a un nombre fixe de
caractères complété par des espaces le cas échéant (par ex.: le nom


commence
toujours au 26ème caractère et occupe toujours 40 caractères)
- les montants sont sur 10 caractères, sachant que les 2 derniers sont
les
centimes.
- il y a environ 800 lignes par fichier

Peut-on extraire les données du fichier vers une base Access afin de les
exploiter plus facilement ?



Hello,

oui on peut et c'est simple:

1/ créer une table access avec les champs correspondants au modèle
d'enregistrement

2/ écrire une fonction qui découpe chaque ligne en champs
ici très simple, car les enregistrements sont de longueur fixe,
on récupérera chauqe champ avec un Mid$() adéquat

Ecrire aussi les fonctions utiles pour les conversions, par exemple
pour les montants

3/ insérer les records au fur et à mesure dans la table access, en
utilisant
la méthode de ton choix: ADO ou DAO, avec .Addnew ou avec des execute
INSERT ...

N'hésite pas à demander des infos complémentaires si nécessaire.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



--------------------------------------------------------------------------------

Pour l'instant, je l'ouvre en fait sur Excel, puis j'utilise la fonction
STXT pour extraire les chaines , et diviser par 100 pour les nombres, et
exporter vers Access.
ca marche mais c'est lourd.
Je manipule bien les BD et un peu VB6 pour les controles data et
l'enregistrement des données.
j'aurais besoin d'un petit éclaircissement quand tu parle d'une fonction
pour découper les champs, d'autant que seuls certains champs seront
effectivement utiles: c'est le chainon manquant entre mon fichier et ma
table
Après je pense me débrouiller.
Merci de m'indiquer de quelle fonction il s'agit.
Avatar
Jean-Marc
"Thierry" <@ a écrit dans le message de
news:

"Jean-Marc" a écrit dans le message de


news:
42ea0dbc$0$14639$
> "Thierry" <@ a écrit dans le message de
> news:
>> Bonjour,
>> J'ai lu avec intérêt le sujet "Import CSV"ci dessous, et je suis
>> confronté
> à
>> un cas similaire.
>> Je voudrais exporter vers une base Access un fichier de type texte avec
> les
>> caractéristiques suivantes:
>> - chaque ligne fait exactement 240 caractères
>> - une donnée occupe toujours le même emplacement et a un nombre fixe de
>> caractères complété par des espaces le cas échéant (par ex.: le nom
> commence
>> toujours au 26ème caractère et occupe toujours 40 caractères)
>> - les montants sont sur 10 caractères, sachant que les 2 derniers sont
>> les
>> centimes.
>> - il y a environ 800 lignes par fichier
>>
>> Peut-on extraire les données du fichier vers une base Access afin de


les
>> exploiter plus facilement ?
>
> Hello,
>
> oui on peut et c'est simple:
>
> 1/ créer une table access avec les champs correspondants au modèle
> d'enregistrement
>
> 2/ écrire une fonction qui découpe chaque ligne en champs
> ici très simple, car les enregistrements sont de longueur fixe,
> on récupérera chauqe champ avec un Mid$() adéquat
>
> Ecrire aussi les fonctions utiles pour les conversions, par exemple
> pour les montants
>
> 3/ insérer les records au fur et à mesure dans la table access, en
> utilisant
> la méthode de ton choix: ADO ou DAO, avec .Addnew ou avec des execute
> INSERT ...
>
> N'hésite pas à demander des infos complémentaires si nécessaire.
>
> --
> Jean-marc
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>
--------------------------------------------------------------------------


------

Pour l'instant, je l'ouvre en fait sur Excel, puis j'utilise la fonction
STXT pour extraire les chaines , et diviser par 100 pour les nombres, et
exporter vers Access.
ca marche mais c'est lourd.
Je manipule bien les BD et un peu VB6 pour les controles data et
l'enregistrement des données.
j'aurais besoin d'un petit éclaircissement quand tu parle d'une fonction
pour découper les champs, d'autant que seuls certains champs seront
effectivement utiles: c'est le chainon manquant entre mon fichier et ma
table
Après je pense me débrouiller.
Merci de m'indiquer de quelle fonction il s'agit.



Re,

alors on va tout faire avec les fonctions:
Mid$(), Left$(), Right$(), Trim$()

On va supposer que les enregistrements sont comme dans mon exemple,
dans la variable sEnreg
On va récupérer les champs suivants:
NOM Position = 10, longueur = 27
MONTANT Position = 41, Taille = 9

On convertir montant en utilisant le fait que les 2 derniers
caractères sont les centimes:

Dim sEnreg As String
Dim sNom As String
Dim sMontant As String
Dim Montant As Double

' Exemple d'enregistrement
' 1 2 3 4 5
' 123456789012345678901234567890123456789012345678901234"
sEnreg = "AAAAABBBBPIERRE DUPONT XXXX000123456VVVVV"

' récupération du nom (chaine)
sNom = Mid$(sEnreg, 10, 27)
' note: si on veut enlever les espaces, sNom = Trim$(sNom)

' récupération du montant (chaine)
sMontant = Mid$(sEnreg, 41, 9)

' conversion en numérique
Montant = Val(Left$(sMontant, 7)) + Val(Right$(sMontant, 2)) / 100

et on obtient:
Nom = "PIERRE DUPONT"
Montant = 1234,56

Voila, avec ça le reste doit couler de source :-)

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Thierry
Merci beaucoup pour ce début de procédé. Je vais avoir de quoi m'occuper ce
week-end.
Pour la suite, je ferai une boucle du genre Do Until Eof puis AddNew pour
ajouter les champs à la base.
ça sera plus simple que les macro excel.
Encore merci

"Jean-Marc" a écrit dans le message de news:
42ea303a$0$18671$
"Thierry" <@ a écrit dans le message de
news:

"Jean-Marc" a écrit dans le message de


news:
42ea0dbc$0$14639$
> "Thierry" <@ a écrit dans le message de
> news:
>> Bonjour,
>> J'ai lu avec intérêt le sujet "Import CSV"ci dessous, et je suis
>> confronté
> à
>> un cas similaire.
>> Je voudrais exporter vers une base Access un fichier de type texte
>> avec
> les
>> caractéristiques suivantes:
>> - chaque ligne fait exactement 240 caractères
>> - une donnée occupe toujours le même emplacement et a un nombre fixe
>> de
>> caractères complété par des espaces le cas échéant (par ex.: le nom
> commence
>> toujours au 26ème caractère et occupe toujours 40 caractères)
>> - les montants sont sur 10 caractères, sachant que les 2 derniers sont
>> les
>> centimes.
>> - il y a environ 800 lignes par fichier
>>
>> Peut-on extraire les données du fichier vers une base Access afin de


les
>> exploiter plus facilement ?
>
> Hello,
>
> oui on peut et c'est simple:
>
> 1/ créer une table access avec les champs correspondants au modèle
> d'enregistrement
>
> 2/ écrire une fonction qui découpe chaque ligne en champs
> ici très simple, car les enregistrements sont de longueur fixe,
> on récupérera chauqe champ avec un Mid$() adéquat
>
> Ecrire aussi les fonctions utiles pour les conversions, par exemple
> pour les montants
>
> 3/ insérer les records au fur et à mesure dans la table access, en
> utilisant
> la méthode de ton choix: ADO ou DAO, avec .Addnew ou avec des execute
> INSERT ...
>
> N'hésite pas à demander des infos complémentaires si nécessaire.
>
> --
> Jean-marc
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>
--------------------------------------------------------------------------


------

Pour l'instant, je l'ouvre en fait sur Excel, puis j'utilise la fonction
STXT pour extraire les chaines , et diviser par 100 pour les nombres, et
exporter vers Access.
ca marche mais c'est lourd.
Je manipule bien les BD et un peu VB6 pour les controles data et
l'enregistrement des données.
j'aurais besoin d'un petit éclaircissement quand tu parle d'une fonction
pour découper les champs, d'autant que seuls certains champs seront
effectivement utiles: c'est le chainon manquant entre mon fichier et ma
table
Après je pense me débrouiller.
Merci de m'indiquer de quelle fonction il s'agit.



Re,

alors on va tout faire avec les fonctions:
Mid$(), Left$(), Right$(), Trim$()

On va supposer que les enregistrements sont comme dans mon exemple,
dans la variable sEnreg
On va récupérer les champs suivants:
NOM Position = 10, longueur = 27
MONTANT Position = 41, Taille = 9

On convertir montant en utilisant le fait que les 2 derniers
caractères sont les centimes:

Dim sEnreg As String
Dim sNom As String
Dim sMontant As String
Dim Montant As Double

' Exemple d'enregistrement
' 1 2 3 4 5
' 123456789012345678901234567890123456789012345678901234"
sEnreg = "AAAAABBBBPIERRE DUPONT XXXX000123456VVVVV"

' récupération du nom (chaine)
sNom = Mid$(sEnreg, 10, 27)
' note: si on veut enlever les espaces, sNom = Trim$(sNom)

' récupération du montant (chaine)
sMontant = Mid$(sEnreg, 41, 9)

' conversion en numérique
Montant = Val(Left$(sMontant, 7)) + Val(Right$(sMontant, 2)) / 100

et on obtient:
Nom = "PIERRE DUPONT"
Montant = 1234,56

Voila, avec ça le reste doit couler de source :-)

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;