OVH Cloud OVH Cloud

Import CSV

29 réponses
Avatar
Daniel AUBRY
Bonsoir à tous,

je dois importer un fichier CSV dans une base de données.
D'habitude j'ai des fichiers texte avec enregistrements de
longueur fixe.
Quelqu'un pourrait-il me conseiller sur la (bonne) méthode
à utiliser.

Merci,
Dany

10 réponses

1 2 3
Avatar
Jean-Marc
"Daniel AUBRY" a écrit dans le message de
news:42e6904c$0$7587$
Bonsoir à tous,

je dois importer un fichier CSV dans une base de données.
D'habitude j'ai des fichiers texte avec enregistrements de
longueur fixe.
Quelqu'un pourrait-il me conseiller sur la (bonne) méthode
à utiliser.



Hello,

peux tu donner quelques détails?

Tu veux faire cela en VB, je suppose, car sinon, toutes
les bdd savent importer des fichiers CSV directement.

Si le fichier à importer est un CSV (enregistrements séparés par des
virgules ou points virgule),
alors il y a plusieurs façons de faire.

Quand je dois faire ce genre de choses, je splitte mes lignes en entrées, et
je génère des "INSERT" statements, que j'exécute ensuite soit à la volée,
soit en batch.

En pseudo code, ça donnerait:

Ouvrir fichier CSV en Lecture
Tant_Que enregistrement
Lire_Ligne enregistrement
Splitter enregistrement en champs
Génère INSERT statement
Si "On the Fly" Alors
Exécute Statement
Sinon
Stocke Statement dans fichier batch
Fin si
Fin Tant_Que
Ferme fichier CSV
Si "On the Fly" Alors
' C'est fini'
Sinon
Ouvre fichier batch
Tant_Que pas fin_de_fichier
Lire INSERT statement
Execute INSERT statement
Fin Tant_Que
Fin Si

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

effectivement les données du fichier sont séparées
par des points-virgule et certaines données encadrées
par des doubles-cote.
Ce qui me pose problème n'est pas de lire le fichier
ni d'écrire dans la base mais bien ce que tu appelles
Splitter enregistrement en champs

Dany

"Jean-Marc" a écrit dans le message de news:
42e698e6$0$7122$
"Daniel AUBRY" a écrit dans le message de
news:42e6904c$0$7587$
Bonsoir à tous,

je dois importer un fichier CSV dans une base de données.
D'habitude j'ai des fichiers texte avec enregistrements de
longueur fixe.
Quelqu'un pourrait-il me conseiller sur la (bonne) méthode
à utiliser.



Hello,

peux tu donner quelques détails?

Tu veux faire cela en VB, je suppose, car sinon, toutes
les bdd savent importer des fichiers CSV directement.

Si le fichier à importer est un CSV (enregistrements séparés par des
virgules ou points virgule),
alors il y a plusieurs façons de faire.

Quand je dois faire ce genre de choses, je splitte mes lignes en entrées,
et
je génère des "INSERT" statements, que j'exécute ensuite soit à la volée,
soit en batch.

En pseudo code, ça donnerait:

Ouvrir fichier CSV en Lecture
Tant_Que enregistrement
Lire_Ligne enregistrement
Splitter enregistrement en champs
Génère INSERT statement
Si "On the Fly" Alors
Exécute Statement
Sinon
Stocke Statement dans fichier batch
Fin si
Fin Tant_Que
Ferme fichier CSV
Si "On the Fly" Alors
' C'est fini'
Sinon
Ouvre fichier batch
Tant_Que pas fin_de_fichier
Lire INSERT statement
Execute INSERT statement
Fin Tant_Que
Fin Si

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




Avatar
Daniel AUBRY
J'ai été un peu rapide en écrivant que je n'avais
pas de problèmes pour lire le fichier CSV !!
Avec Line Input VB considere que le fichier
n'a qu'une seule ligne !!

Je suis bien planté !!

dany
"Jean-Marc" a écrit dans le message de news:
42e698e6$0$7122$
"Daniel AUBRY" a écrit dans le message de
news:42e6904c$0$7587$
Bonsoir à tous,

je dois importer un fichier CSV dans une base de données.
D'habitude j'ai des fichiers texte avec enregistrements de
longueur fixe.
Quelqu'un pourrait-il me conseiller sur la (bonne) méthode
à utiliser.



Hello,

peux tu donner quelques détails?

Tu veux faire cela en VB, je suppose, car sinon, toutes
les bdd savent importer des fichiers CSV directement.

Si le fichier à importer est un CSV (enregistrements séparés par des
virgules ou points virgule),
alors il y a plusieurs façons de faire.

Quand je dois faire ce genre de choses, je splitte mes lignes en entrées,
et
je génère des "INSERT" statements, que j'exécute ensuite soit à la volée,
soit en batch.

En pseudo code, ça donnerait:

Ouvrir fichier CSV en Lecture
Tant_Que enregistrement
Lire_Ligne enregistrement
Splitter enregistrement en champs
Génère INSERT statement
Si "On the Fly" Alors
Exécute Statement
Sinon
Stocke Statement dans fichier batch
Fin si
Fin Tant_Que
Ferme fichier CSV
Si "On the Fly" Alors
' C'est fini'
Sinon
Ouvre fichier batch
Tant_Que pas fin_de_fichier
Lire INSERT statement
Execute INSERT statement
Fin Tant_Que
Fin Si

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




Avatar
parci
>peux tu donner quelques détails?

Tu veux faire cela en VB, je suppose, car sinon, toutes
les bdd savent importer des fichiers CSV directement.

Si le fichier à importer est un CSV (enregistrements >séparés par des virgules


ou points virgule),
alors il y a plusieurs façons de faire.



Plus simple et plus rapide :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q262537

Si le séparateur n'est pas le point virgule, il faut créer un fichier "schema.ini"
dans le même répertoire que les fichiers csv (ou txt) avec pour chaque fichier
une section qui indique le séparateur (ligne Format) à utiliser :

[mon_fichier.csv]
ColNameHeaderúlse
Format=(,)
MaxScanRows%
CharacterSet=OE

--
Message monitoré par axinews : http://www.axinews.com
Avatar
Jean-Marc
"parci" a écrit dans le message de
news:42e729d1$0$7105$
>peux tu donner quelques détails?
>
>Tu veux faire cela en VB, je suppose, car sinon, toutes
>les bdd savent importer des fichiers CSV directement.
>
>Si le fichier à importer est un CSV (enregistrements >séparés par des


virgules
ou points virgule),
>alors il y a plusieurs façons de faire.

Plus simple et plus rapide :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q262537

Si le séparateur n'est pas le point virgule, il faut créer un fichier


"schema.ini"
dans le même répertoire que les fichiers csv (ou txt) avec pour chaque


fichier
une section qui indique le séparateur (ligne Format) à utiliser :

[mon_fichier.csv]
ColNameHeaderúlse
Format=(,)
MaxScanRows%
CharacterSet=OEM



Hello,

C'est une méthode, mais qui suppose plein de choses:
moteur Jet, utilisation de ADO, etc.

C'est moins générique, amha.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Jean-Marc
"Daniel AUBRY" a écrit dans le message de
news:42e6a8df$0$5042$
J'ai été un peu rapide en écrivant que je n'avais
pas de problèmes pour lire le fichier CSV !!
Avec Line Input VB considere que le fichier
n'a qu'une seule ligne !!



Alors il va falloir un peu plus de prog.

Je suppose que tu connais la description de la table que tu importes,
c'est à dire pour chaque enregistrement tu connais:
- le nombre de champs,
- [le nom] et le type de chaque champ.

Voici ce que je ferais:
A/ Lecture du fichier en un seul bloc, une lecture binaire avec Get,
dans un seul gros buffer,
B/ Puis une fonction qui sépare les enregistrments:
Il suffit de lire dans le buffer en comptant le nombre de ";".
C/ Puis une seconde fonction qui sépare chaque enregistrements en champs
(avec Split() par exemple)
D/ Puis encore une fonction qui fabrique les INSERT

La partie A/ a été décrite ici et se trouve dans la FAQ, je crois.
Si tu as des soucis avec B/ ou C/, tu peux demander ici.
La partie D/ est triviale, normalement.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Fred
Dans son message 42e72df6$0$10877$
Jean-Marc nous dit :

"parci" a écrit dans le message de
news:42e729d1$0$7105$
peux tu donner quelques détails?

Tu veux faire cela en VB, je suppose, car sinon, toutes
les bdd savent importer des fichiers CSV directement.

Si le fichier à importer est un CSV (enregistrements >séparés par
des virgules ou points virgule), alors il y a plusieurs façons de
faire.



Plus simple et plus rapide :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q262537

Si le séparateur n'est pas le point virgule, il faut créer un
fichier "schema.ini" dans le même répertoire que les fichiers csv
(ou txt) avec pour chaque fichier une section qui indique le
séparateur (ligne Format) à utiliser :

[mon_fichier.csv]
ColNameHeaderúlse
Format=(,)
MaxScanRows%
CharacterSet=OEM



Hello,

C'est une méthode, mais qui suppose plein de choses:
moteur Jet, utilisation de ADO, etc.

C'est moins générique, amha.



Sans vouloir trancher, car cela dépend de la complexité du fichier lu,
il faut penser que l'ODBC va gérer correctement les formats des données,
par exemple un séparateur dans un champ de type text, ou alors un champ
de type texte qui contient des délimiteurs de texte, peut-être même les
champs de type date (?) (pas testé).
Si le contenu du fichier est bien maîtrisé le split est bien sûr plus
simple.

La seule chose qui me gêne ici pour appliquer l'ODBC, c'est la remarque
de Daniel sur l'absence de sauts de lignes dans son fichier ??


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Daniel AUBRY
Je confirme :
un fichier CSV à la norme serait comme ceci :

Nom;Prenom;Age;Ville
Dupond;Jean;58;Marseille
Robin;;47;Paris
Etienne;Régis;45;Lourdes

le mien est comme cela : (tout sur la même ligne avec 54 champs)

Nom;Prenom;Age;Ville;Dupond;Jean;58;Marseille;Robin;;47;Paris;Etienne;Régis;45;Lourdes

Ce sont des fichiers provenant d'un site Internet ou des sprotifs peuvent
faire des inscriptions en ligne. On télécharge ces fichiers pour
l'application chronométrage.

Dany

"Fred" a écrit dans le message de news:

Dans son message 42e72df6$0$10877$
Jean-Marc nous dit :

"parci" a écrit dans le message de
news:42e729d1$0$7105$
peux tu donner quelques détails?

Tu veux faire cela en VB, je suppose, car sinon, toutes
les bdd savent importer des fichiers CSV directement.

Si le fichier à importer est un CSV (enregistrements >séparés par
des virgules ou points virgule), alors il y a plusieurs façons de
faire.



Plus simple et plus rapide :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q262537

Si le séparateur n'est pas le point virgule, il faut créer un
fichier "schema.ini" dans le même répertoire que les fichiers csv
(ou txt) avec pour chaque fichier une section qui indique le
séparateur (ligne Format) à utiliser :

[mon_fichier.csv]
ColNameHeaderúlse
Format=(,)
MaxScanRows%
CharacterSet=OEM



Hello,

C'est une méthode, mais qui suppose plein de choses:
moteur Jet, utilisation de ADO, etc.

C'est moins générique, amha.



Sans vouloir trancher, car cela dépend de la complexité du fichier lu, il
faut penser que l'ODBC va gérer correctement les formats des données, par
exemple un séparateur dans un champ de type text, ou alors un champ de
type texte qui contient des délimiteurs de texte, peut-être même les
champs de type date (?) (pas testé).
Si le contenu du fichier est bien maîtrisé le split est bien sûr plus
simple.

La seule chose qui me gêne ici pour appliquer l'ODBC, c'est la remarque de
Daniel sur l'absence de sauts de lignes dans son fichier ??


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Jean-Marc
"Daniel AUBRY" a écrit dans le message de
news:42e79f07$0$29802$
Je confirme :
un fichier CSV à la norme serait comme ceci :

Nom;Prenom;Age;Ville
Dupond;Jean;58;Marseille
Robin;;47;Paris
Etienne;Régis;45;Lourdes

le mien est comme cela : (tout sur la même ligne avec 54 champs)




Nom;Prenom;Age;Ville;Dupond;Jean;58;Marseille;Robin;;47;Paris;Etienne;Régis;
45;Lourdes

Ce sont des fichiers provenant d'un site Internet ou des sprotifs peuvent
faire des inscriptions en ligne. On télécharge ces fichiers pour
l'application chronométrage.



Re,

Tu peux donc utiliser la méthode que j'indiquais dans un post précédent.
Si tu veux un mini exemple, je peux faire cela.

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

En folâtrant sur son clavier, Jean-Marc s'est exprimé ainsi :

"Daniel AUBRY" a écrit dans le message de
news:42e79f07$0$29802$
Je confirme :
un fichier CSV à la norme serait comme ceci :

Nom;Prenom;Age;Ville
Dupond;Jean;58;Marseille
Robin;;47;Paris
Etienne;Régis;45;Lourdes

le mien est comme cela : (tout sur la même ligne avec 54 champs)




Nom;Prenom;Age;Ville;Dupond;Jean;58;Marseille;Robin;;47;Paris;Etienne;Régis;
45;Lourdes

Ce sont des fichiers provenant d'un site Internet ou des sprotifs
peuvent faire des inscriptions en ligne. On télécharge ces fichiers
pour l'application chronométrage.



Re,

Tu peux donc utiliser la méthode que j'indiquais dans un post
précédent. Si tu veux un mini exemple, je peux faire cela.



J'ai un exemple, mais il faut que je l'adapte.
Si tu n'as rien de fait, je peux adapter mon code et le publier.

--
Cordialement,

Aski

AntiSpamEdit, aide de K9 en français
http://h.dechily.free.fr/
http://h.charlier.de.chily.perso.cegetel.net/index.htm
1 2 3