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

WinDev Discussion :

pour toute chaine - erreur de doublon


Sujet :

WinDev

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    425
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 425
    Points : 129
    Points
    129
    Par défaut pour toute chaine - erreur de doublon
    Bonjour,

    J'utilise le code si dessous pour analyser un fichier texte, en sortir des données, et le transcrire vers un fichier Txt pour l'importer via la fonction Himportetexte.

    Ceci fonctionne parfaitement bien, excepté que je viens de voir qu'il est possible que certaines rubriques dans le fichier original peuvent apparaître deux fois.

    Exemple :
    fichier original : 200 data1 201 data2 202 data3 etc... 201 data2
    devient : data1 data2 data3 etc...

    Mais la fonction Himportetexte me donne par exemple l'erreur que la rubrique 201 existe déjà.

    Comment faire en sorte que lors de la boucle (ou ailleurs) une rubrique (et ses données correspondantes) ne puisse pas apparaître deux fois dans le même fichier ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    POUR TOUTE CHAINE sUnElement DE sFichierSource SEPAREE PAR Caract(10)
        //Si dans la chaine sUnElement on trouve au moins
        // un Caract(28) alors on récupère les valeurs     
        SI ChaîneOccurrence( sUnElement, Caract( 28 ) ) > 0 ALORS
            //stLigne1 contient les noms des rubrique
            //Que l'on fait précéder d'un "R"
            gsLigne1 += "R" + ExtraitChaîne( sUnElement, 1, Caract(28) ) + Caract(44) //TAB
            //stLigne2 contients les valeurs séparés par des tabulations
            stLigne2 += ExtraitChaîne( sUnElement, 3, Caract(28) ) + TAB
        FIN    
    FIN
    gsLigne1 += "Runiek_FM_ID" + Caract(44) + "Rpolibezoek"
    BAV

  2. #2
    Membre averti Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Points : 394
    Points
    394
    Par défaut
    Salut,
    tu peux faire toi-même le contrôle consistant à regarder si la rubrique que tu vas mémoriser existe déjà. Il y a plusieurs solutions :
    - une table de hachage que tu remplis à fur et à mesure que tu lits tes rubriques. Avant d'inscrire une rubrique, tu vérifie si elle existe déjà. Je parle de table de hachage car l'accès sera très rapide.
    - un fichier de base de données temporaire, très simple mais pas forcément très top question propreté de la chose.
    - etc ....

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    425
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 425
    Points : 129
    Points
    129
    Par défaut
    Merci pour ta réponse.

    pourrais-tu un peux plus élaborer les deux solution.
    Je ne suis pas sur de comprendre après mes recherche de hashage dans l'aide.
    Et le fichier je le ferais comment ?

    Est-ce que tu pourrais éventuellement interagir avec le code que j'ai donnée ?

    Bien à toi et déjà merci pour cette réponse !

  4. #4
    Membre averti Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Points : 394
    Points
    394
    Par défaut
    Salut,

    # Pour la table de hachage :
    Tu lis tes lignes, et tu te demandes - avant de mémoriser la rubrique + donnée - si la rubrique n'a pas déjà été lue, bref est-ce un doublon ?
    -> Avant chaque enregistrement de rubrique+donnée, tu regardes si la rubrique n'est pas déjà présente dans la table de hachage (une sorte d'annuaire des rubriques).
    Après chaque rubrique + donnée lue, si la rubrique n'est pas déjà présente dans la table de hachage, tu insères la rubrique dans une table.
    De cette manière tu pourras détecter les doublons, et agir en conséquence.

    # Pour de fichier
    Tu définis un fichier (par exemple HyperFile) avec deux champs : rubrique et donnée, dont le champ rubrique est un identifiant unique : pas de doublons possibles, une erreur sera levée sinon.
    Maintenant tu lis ton fichier texte, tu insères tes couples rubriques / données. Si un doublon est détecté, HyperFile te dira qu'il y a un doublon, à toi de gérer cet évènement. Au final, tu te retrouveras avec un fichier contenant ton import, sans doublon.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    425
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 425
    Points : 129
    Points
    129
    Par défaut
    Merci pour les réponses.

    Pour la table de hachage j'ai toujours pas compris ?

    Qu'est-ce que c'est en fait ?? Comment la crée t'on ??

    Mais avec le deuxième solution je me suis débrouillè:

    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
     
    POUR TOUTE CHAINE sUnElement DE sFichierSource SEPAREE PAR Caract(10)
        //Si dans la chaine sUnElement on trouve au moins
        // un Caract(28) alors on récupère les valeurs     
        SI ChaîneOccurrence( sUnElement, Caract( 28 ) ) > 0 ALORS
            //stLigne1 contient les noms des rubrique
            //Que l'on fait précéder d'un "R"
            ConversImport.Rubrique = "R" + ExtraitChaîne( sUnElement, 1, Caract(28) ) + Caract(44) //TAB
            HAjoute(ConversImport)
            SI HErreurDoublon() = Vrai ALORS GOTO suite
            gsLigne1 += "R" + ExtraitChaîne( sUnElement, 1, Caract(28) ) + Caract(44) //TAB
            //stLigne2 contients les valeurs séparés par des tabulations
            stLigne2 += ExtraitChaîne( sUnElement, 3, Caract(28) ) + TAB
            suite:
        FIN
    Merci

  6. #6
    Membre averti Avatar de JPDMJC
    Profil pro
    Inscrit en
    Février 2005
    Messages
    337
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 337
    Points : 394
    Points
    394
    Par défaut
    Le principe de la table de hachage : http://fr.wikipedia.org/wiki/Table_de_hachage

    Pour le nom en WinDev ... je n'arrive pas à m'en souvenir (ça aurait été trop simple de l'appeler table de hachage ^^)

  7. #7
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    hum... a t'il une version qui gere les tables de hachage ?

    ton code est très bien... mais bon un GOTO beurk

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/01/2013, 09h44
  2. [WD14] Pour toute chaine . de . sep par RC = éviter doublons?
    Par chapeau_melon dans le forum WinDev
    Réponses: 2
    Dernier message: 03/02/2010, 09h23
  3. Réponses: 1
    Dernier message: 29/11/2008, 10h01
  4. Réponses: 3
    Dernier message: 22/10/2008, 11h18
  5. Problème pour lire un DVD tout neuf (erreur de copyright...)
    Par damien99 dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 28/03/2006, 17h22

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