IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils Firebird Discussion :

FlameRobin, importer fichier CSV


Sujet :

Outils Firebird

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut FlameRobin, importer fichier CSV
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    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

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    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
    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
    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.

    Et voici l'exécution :
    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...
    Si vous avez des questions, n'hésitez pas.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import fichier CSV
    Par oki972 dans le forum SQLite
    Réponses: 5
    Dernier message: 08/10/2007, 20h58
  2. [Pb Importation fichier CSV]
    Par Jeremie_Vi dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2007, 06h54
  3. Importation fichier CSV Excel
    Par @lex(is) dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 22/06/2006, 02h16
  4. Update de plusieurs tables, import fichier csv sql loader
    Par fusuke dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 18/05/2006, 15h08
  5. Réponses: 9
    Dernier message: 31/01/2006, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo