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

Alimentation Discussion :

Solution pour Extraction de données Excell ? Routines?


Sujet :

Alimentation

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Solution pour Extraction de données Excell ? Routines?
    Bonjour,
    J'ai un souci avec Talend, pas tellement avec le logiciel mais pour trouver une solution.
    Je m'explique :
    j'ai un fichier excell en entrée --> un tMap --> j'extrais des données dans des tables d'une base de données MySQL.

    Mon problème est que dans le fichier Excell certaines cellules contiennent plusieurs données dans la même cellules séparées par des "/". Je voudrais donc séparrer les données et les insérer une à une dans la base cependant le nombre de données par cellules n'est jamais identique sinon ça serait plus facile.

    par exemple : j'ai une collone Auteur dans mon fichier Excell qui est sous cette forme --> M.Michel/B. Benoit/s.Sebastien
    B.Maurice/L.Laurent
    S.JEAN etc...
    il peu y en avoir plus comme être vide.

    J'essais de créer une routine récursive qui retournerait la partie gauche (grâce aux outils disponibles : StringHandling.LEFT...) du "/" et de reprendre en paramètre la partie droite et de recommencer mais je galère un peu... je sais pas si c'est possible.
    J'espere être assez claire sinon je reste à disposition pour toutes questions...
    Si vous avez des solutions??
    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 74
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par ccbbrr172 Voir le message
    j'ai un fichier excell en entrée --> un tMap --> j'extrais des données dans des tables d'une base de données MySQL.
    Pourquoi tu n'attaques pas directement MySQL ? Tu as les connexions visiblement ...
    Attaquer directement une structure relationnelle est largement plus aisée que gérer un dataset tordu intermédiaire sous Excel.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Essaye le tNormalize, il fait exactement ce que tu veux.

  4. #4
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut
    avec un tjavarow tu dois aussi pouvoir faire ce que tu veux si tu connais le java

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je crois que je vais essayer de mettre la requête SQL qui permet d'ajouter la partie gauche directement dans ma routine. Cette fonction se rappellera (avec en paramètre la partie droite du "/") et prendra a chaque fois la partie gauche du "/"...
    Merci à vous pour vos réponses je vais essayer ca...

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai un autre souci à propos de la connexion à la base de données j'ai le message d'erreur suivant :
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    Je ne comprend pas car j'ai bien les drivers nécessaires à la connexion normalement... dans Talend dans le répertoire lib.

    Voici un extrait de ce que j'ai fait... si quelqu'un voit quelque chose??? merci

    // template routine Java
    package routines;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;



    public class extractDonnees
    {

    public static void SeparreDonnee(int maRef, String maDonnee)
    {
    int nb;
    String pg;
    int firstPos;
    int longueurDonnee1;
    String secondDonnee;

    if (maDonnee != null)
    {
    try
    {
    Class.forName("com.mysql.jdbc.Driver");
    }
    catch (ClassNotFoundException cnfe)
    {
    System.out.println(cnfe);
    }

    // compte le nombre de "/" séparateur des données
    nb = StringHandling.COUNT(maDonnee, "/");

    // cas ou il y a plusieurs données
    if (nb>=1)
    {
    // Calcul de la position du "/" et on prend la partie gauche
    firstPos = StringHandling.INDEX(maDonnee, "/");
    pg = StringHandling.LEFT(maDonnee, firstPos);

    try
    {

    String url = "jdbc:mysql://194.57.178.224:3306/oai";
    Connection con = DriverManager.getConnection(url, "oaicat", "oaicat");

    Statement st = con.createStatement();

    // Requete sql pour l'ajout de la partie gauche dans la base de données
    String ReqAjout = "INSERT INTO METADATA (recID, varName, value, scheme, subfield) values ("+maRef+", '650', "+pg+", '0', 'a');";

    st.executeUpdate(ReqAjout);

    st.close();
    con.close();
    }
    catch (SQLException se)
    {
    System.out.println(se);
    }


    // Calcul de la longueur totale de la chaine pour avoir la partie droite
    longueurDonnee1 = StringHandling.LEN(pg);

    // Récupération de la partie droite (longueur chaine - longueur de la partie gauche)
    secondDonnee = StringHandling.RIGHT(maDonnee, longueurDonnee1 - firstPos);

    // Compte le nombre de "/" dans la partie droite (cas ou il y plusieurs données dans la partie droite
    if (StringHandling.COUNT(secondDonnee, "/")>=1)
    {
    // Appel de la procédure avec en paramètre la partie droite à traiter
    extractDonnees.SeparreDonnee(maRef, secondDonnee);
    }
    else
    {
    ...

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    PS : j'ai oublié j'appelle cette routine dans un tJavarow

  8. #8
    co2
    co2 est déconnecté
    Membre éclairé
    Avatar de co2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 182
    Points : 829
    Points
    829
    Par défaut
    Citation Envoyé par mhirt Voir le message
    Bonjour,

    Essaye le tNormalize, il fait exactement ce que tu veux.
    Citation Envoyé par ccbbrr172 Voir le message
    Je crois que je vais essayer de mettre la requête SQL qui permet d'ajouter la partie gauche directement dans ma routine. Cette fonction se rappellera (avec en paramètre la partie droite du "/") et prendra a chaque fois la partie gauche du "/"...
    Merci à vous pour vos réponses je vais essayer ca...
    Bonjour,

    Je pense que ta routine fait beaucoup trop de chose et ne sera difficilement maintenable (surtout par des personnes ne connaissant pas java). Je te conseille de tester la solution de mhirt : utiliser les composants de normalisation/denormalisation intégrés en standard dans la solution afin d'avoir une representation graphique de ton job.

    Cédric

    PS: esssaye de mettre [TALEND] dans le titre de ton thread afin d'avoir que l'on repere des la lecture du titre quel ETL tu utilises. Merci
    Cédric Carbone, Talend CTO
    Blog sur Talend, la Business Intelligence et l'intégration de données | Télécharger Talend Open Studio 3.2 / TOP 3.2
    Le forum Talend francophone | anglophone

    Actu : Offre d'emploi Consultants Talend |
    Tu as la réponse à ta question ? Clique sur en bas à gauche de ton message

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je vois pas trop ce que sa fait les tNormalize/denormalize... quelqu'un pourrait m'expliquer???
    car je vois pas comment je peut extraire les données d'une seule cellule Excel pour les mettre dans plusieurs cellules alors que je ne sais pas a chaque fois le nombre exact de données.
    Dans ma routine java je voulais aller insérer les données directement en base de données mais ca marche pas...

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

Discussions similaires

  1. [RegEx] aide pour extraction de données
    Par Hotfirenet dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2008, 20h19
  2. SAP et PL/SQL(Pour extraction de données)
    Par ricobye dans le forum SAP
    Réponses: 8
    Dernier message: 07/09/2007, 11h08
  3. Réponses: 23
    Dernier message: 24/05/2007, 10h32
  4. extraction de données excel
    Par gzanax dans le forum Excel
    Réponses: 2
    Dernier message: 13/03/2007, 14h41
  5. Réponses: 23
    Dernier message: 01/03/2007, 15h03

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