Bonjour,
j'avais utilisé une version à une certaine époque
et je m'aperçois qu'elle n'a guère évolué..
je teste la version 0.9.2.1851
Comment faire pour importer un ficher CSV dans une table ?
merci
Bonjour,
j'avais utilisé une version à une certaine époque
et je m'aperçois qu'elle n'a guère évolué..
je teste la version 0.9.2.1851
Comment faire pour importer un ficher CSV dans une table ?
merci
Bonjour,
FlameRobin est loin de tout faire
Il propose l'exportation en CSV mais pas son contraire, si la table CSV est de longueur fixe l'utilisation de EXTERNAL TABLE est possible
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 create table CSVTABLE external file 'nomfichier.csv' ( DataCol1 char(10) character set iso88591, Sep1 char(1) character set iso88591, DataCol2 char(25) character set iso88591, Sep2 char(1) character set iso88591, DataCol3 char(7) character set iso88591, Linebreak char(1) character set iso88591 ); insert into maTable ( Col1, -- varchar(10) Col2Date, -- datetime Col3Entier -- int ) select trim(cast(DataCol1 as varchar(10)), cast(DataCol2 as datetime), cast(DataCol3 as int);
pour les fichiers CSV de longueur variable je pense qu'une procédure reste possible (utilisation de POSITION pour retrouver les séparateurs)
ce que je fait relativement souvent avec Flamerobin est plutôt l'utilisation de récupération de Script d'insertion :
je récupère le résultat (total) de ma requête et fait un export et un 'Copy as INSERT Statement' ou 'Copy as UPDATE statement' selon les besoins quitte ensuite à faire quelques manipulations sur le script avant
il y a d'autres outils en ligne de commande (ça va plaire à artemus24) par exemple fbexport
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
SGBD : Firebird 2.5, 3, SQLite
générateurs Etats : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Ubuntu, Androïd
j'ai posé cette question car un souci est apparut avec la dernière version de EMS dans
la gestion de l'incrément..(peut-être une limitation sur la version software..)
merci SergioMaster pour le external avec FlameRobin mais
moins pratique néanmoins que EMS qui fait le mapping direct.
En tout cas, j'en prend bonne note.
+ 1
@bientôt
Salut à tous.
J'ai déjà traité cela !
Sauf qu'il y a une seule contrainte, le fichier à importer doit être de longueur fixe. D'ailleurs voici l'exemple d'un fichier import.txt
on ne le voie pas ici, mais la longueur est de 35 caractères, donc la ligne est complété par le caractère blanc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 1;un;eins;one; 2;;zwei;two; 3;trois;drei;three; 4;quatre;vier;four; 5;cinq;;five 13;treize;dreizehn;thirteen
Et voici l'exécution :
Si vous avez des questions, n'hésitez pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141 CREATE DATABASE '..\Data\Base.fdb' page_size 4096 DEFAULT CHARACTER SET ISO8859_1; -- ===================== -- Création table 'test' -- ===================== CREATE TABLE test ( id smallint NOT NULL, lib1 varchar(10) NOT NULL, lib2 varchar(10) NOT NULL, lib3 varchar(10) NOT NULL ); -- =============================== -- Création table externe 'Import' -- =============================== CREATE TABLE Import external 'e:/23.FireBird/30.Table_Externe/Ex_03/Import.txt' ( libelle char(35), CRLF char(02) ); -- ===================== -- Vidage table 'Import' -- ===================== select libelle from Import; LIBELLE =================================== 1;un;eins;one; 2;;zwei;two; 3;trois;drei;three; 4;quatre;vier;four; 5;cinq;;five 13;treize;dreizehn;thirteen -- ============================ -- Création Procédure 'remplir' -- ============================ set term $$ ; create procedure remplir as declare id smallint default null; declare lib1 varchar(10) default null; declare lib2 varchar(10) default null; declare lib3 varchar(10) default null; declare newpos integer default 0; declare oldpos integer default 0; declare token char(01) default ';'; declare result char(255) default ''; declare input char(35) default ''; declare arret integer default 1; declare tab cursor for (select libelle from Import); begin open tab; fetch tab into input; while (row_count > 0) do begin id = null; lib1 = null; lib2 = null; lib3 = null; oldpos = 1; newpos = 1; arret = 1; while (arret=1) do begin newpos = position(token, input, oldpos); if (newpos > 0) then begin result = substring(input from oldpos for newpos - oldpos); oldpos = newpos + 1; end else begin result = substring(input from oldpos); arret = 0; end if (id is null) then id = cast(result as smallint); else if (lib1 is null) then lib1 = '>' || trim(cast(result as varchar(10))) || '<'; else if (lib2 is null) then lib2 = '>' || trim(cast(result as varchar(10))) || '<'; else if (lib3 is null) then lib3 = '>' || trim(cast(result as varchar(10))) || '<'; end insert into test values (:id, :lib1, :lib2, :lib3); fetch tab into input; end close tab; end$$ set term ; $$ -- ============================= -- Exécution Procédure 'remplir' -- ============================= execute procedure remplir; -- ========= -- Nettoyage -- ========= drop procedure remplir; commit; drop table Import; -- =================== -- Vidage Table 'Test' -- =================== select * from test; ID LIB1 LIB2 LIB3 ======= ========== ========== ========== 1 >un< >eins< >one< 2 >< >zwei< >two< 3 >trois< >drei< >three< 4 >quatre< >vier< >four< 5 >cinq< >< >five< 13 >treize< >dreizehn< >thirteen< exit; Appuyez sur une touche pour continuer...
@+
merci Artemus24,
mais je cherche un outil comme EMS, qui fait le mapping direct et
bien entendu quelque soit la taille des champs..
@bientôt
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager