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

Langage Perl Discussion :

supprimer les doublons d'un fichier


Sujet :

Langage Perl

  1. #21
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Un algorithme intermédiaire entre les 1500 lignes de code où chaque handle de fichier est stocké dans une variable séparée, et un tableau dispatcher de fermetures anonymes est le tableau de handle de fichier
    Oui, c'est exactement la seconde solution que j'ai proposée hier dans mon post 17 ci-dessus (enfin, pas un tableau en l'occurrence, mais un hachage de handles de fichiers).

  2. #22
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par vidici Voir le message
    j'ai employé exists par ce que je ne connais pas ce que je cherche
    et j'ai remis le if à l'endroit car définitivement je n'arrives pas à encadrer le " je fais ceci " if quelquechose
    Cela dit je pense que l'esprit général est sauvgardé et le tout fonctionne parfaitement.
    Oui, c'est tout-à-fait le même esprit. La seule différence est que tu remplis la table de distribution au fur et à mesure de tes besoins, alors que je pouvais dans le cas des 26 lettres de l'alphabet me permettre de l'initialiser au tout début.

    Juste deux petits points:
    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
     
    while (<$in>) {
     
            if($_ =~ /cequejecherche.+?cequejetrouve(.+?)\]/){
                    my $result = $1;
                    $result =~ s/ /_/g;
                    if ( ! exists ( $dispatch{$result})) {
                            $dispatch{$result} = create_sub($result);
                            $dispatch{$result}->($_);
                    }else{
                    $dispatch{$result}->($_);
            }
    }
     
    }
    Fais attention à l'indentation. J'ai d'abord cru qu'il manquait une accolade fermante au if le plus interne, avant de voir que tu avais deux accolades l'une en dessous de l'autre. Franchement, soigner son indentation permet d'économiser des heures de débogage.

    Le deuxième point: j'éviterais de répéter deux fois la ligne $dispatch{$result}->($_);, par exemple en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    if ( ! exists ( $dispatch{$result})) {
                            $dispatch{$result} = create_sub($result);
                    }
                    $dispatch{$result}->($_);
    ou même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    $dispatch{$result} = create_sub($result)  unless exists $dispatch{$result}
                    $dispatch{$result}->($_);
    ce qui réduit le "bruit" dû aux parenthèses et accolades trop nombreuses. Mais j'ai compris que tu n'aimais pas les modificateurs d'instructions (les if ou unless placés après l'instruction). Moi, j'aime bien, parce que cela permet ici de réduire tes six lignes de code à seulement deux, et cette réduction permet de voir plus de code à l'écran et donc d'avoir moins besoin de naviguer dans le code pour comprendre ce qu'il fait. Mais c'est purement affaire de goût, tu fais comme tu veux.

    Tu peux même écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    exists $dispatch{$result} or $dispatch{$result} = create_sub($result);
    si ça te chante. Je trouve cela assez amusant, mais ce n'est pas forcément très lisible.

  3. #23
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Fais attention à l'indentation. J'ai d'abord cru qu'il manquait une accolade fermante au if le plus interne, avant de voir que tu avais deux accolades l'une en dessous de l'autre. Franchement, soigner son indentation permet d'économiser des heures de débogage.

    c'est ma configuration de vim qui a des ratés avec PERL. Il faut que je pense à arranger ça
    Le deuxième point: j'éviterais de répéter deux fois la ligne $dispatch{$result}->($_);, par exemple en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    if ( ! exists ( $dispatch{$result})) {
                            $dispatch{$result} = create_sub($result);
                    }
                    $dispatch{$result}->($_);
    tout à fait. Je sentais bien en l'écrivant que quelque chose n'allait pas. C'est corrigé.
    ou même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                    $dispatch{$result} = create_sub($result)  unless exists $dispatch{$result}
                    $dispatch{$result}->($_);
    ce qui réduit le "bruit" dû aux parenthèses et accolades trop nombreuses. Mais j'ai compris que tu n'aimais pas les modificateurs d'instructions (les if ou unless placés après l'instruction). Moi, j'aime bien, parce que cela permet ici de réduire tes six lignes de code à seulement deux, et cette réduction permet de voir plus de code à l'écran et donc d'avoir moins besoin de naviguer dans le code pour comprendre ce qu'il fait. Mais c'est purement affaire de goût, tu fais comme tu veux.

    c'est pas que j'aime pas. C'est que je ne me sens pas à l'aise avec cette syntaxe pour l'instant.
    Tu peux même écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    exists $dispatch{$result} or $dispatch{$result} = create_sub($result);
    evidemment, ça fait beaucoup de mots en moins à ecrire, c'est tentant. C'est vrai que quelquefois je me sens très à l'étroit sur l'écran de mon portable .. Merci en tous cas et bonne nuit.

  4. #24
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    A toutes fins utiles, faire suivre au webmaster...

    Bonjour,
    Ce jour 22/11/14 à 12h15 j'ai consulté ma boîte mails.
    Il y avait une notification de developpez.com d'une intervention de Jedaï sur le présent sujet.
    Je ne vois aucun post de Jedaï dans toute la discussion à 14h20.

    Voici le contenu du message, je le mets en QUOTE pour conserver les liens :

    Bonjour dmganges,

    Jedai vient de répondre à une discussion à laquelle vous êtes abonné :
    Forum : Langage (sur Forum du club des développeurs et IT Pro)
    Intitulé de la discussion : supprimer les doublons d'un fichier

    Vous pouvez consulter le nouveau message en suivant ce lien :
    http://www.developpez.net/forums/d14...blons-fichier/

    Contenu du message :
    ***************

    ---Citation (Envoyé par Philou67430)---
    Un algorithme intermédiaire entre les 1500 lignes de code où chaque handle de fichier est stocké dans une variable séparée, et un tableau dispatcher de fermetures anonymes est le tableau de handle de fichier, qui nécessite lui aussi un nombre limité de ligne de code pour ouvrir et écrire dans le fichier adhoc, et une factorisation des appels d'ouverture et d'écriture dans ces fichiers (que ce soit en perl, en C/C++ ou Java)
    ---Fin de la citation---
    Toutefois cela nécessite d'ouvrir puis de refermer un fichier à chaque tour de boucle, ce qui peut avoir un coût non-négligeable. D'un autre côté cela évite de s'inquiéter de la limite de handles ouverts par processus présente dans la plupart des OS...

    -- Jedaï *************** Il peut y avoir eu d'autres réponses, mais vous ne recevrez pas de nouvelle notification avant votre prochaine visite du forum. Cordialement, L'équipe Forum du club des développeurs et IT Pro ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Informations sur le désabonnement : Pour supprimer votre abonnement à cette discussion, veuillez suivre ce lien : http://www.developpez.net/forums/sub...dcf9a06f32ffeb Pour supprimer votre abonnement à toutes les discussions, veuillez suivre ce lien : http://www.developpez.net/forums/sub...n&folderid=all

  5. #25
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Franchement, je ne comprends pas le message de Jedaï. A mon humble avis, il a réagi au post de Philou, puis s'est rendu compte qu'il avait mal compris et a décidé de supprimer son message. C'est ma seule explication.

  6. #26
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Oui, j'ai écrit cette réponse avant de m'apercevoir que tu parlais également d'un tableau de handle alors que je pensais que tu introduisais la possibilité d'utiliser un tableau de noms de fichier (qui est en effet la variante encore plus bas niveau de la technique proposée dans ce sujet, ne nécessitant même pas que les handles soient de première classe) car la technique du tableau de handle avait déjà été évoqué avant ta réponse.
    Après relecture, je me suis rendu compte de ma méprise et ai donc supprimé mon message qui du coup n'apportait guère au sujet (à part une référence à la limite éventuelle du nombre de handle par processus, toujours bonne à garder en tête, quitte à la modifier si elle est trop pénible).

    Apparemment un mail t'avait déjà été envoyé... Ça m'apprendra à poster sans relire !

    --
    Jedaï

  7. #27
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Désolé pour le dérangement, j'avais pensé à un pb technique...

Discussions similaires

  1. Supprimer les doublons dans un fichier
    Par ninou blue dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2014, 21h52
  2. [XL-2007] Trier fichiers excel pour supprimer les doublons
    Par El-Cherubin dans le forum Excel
    Réponses: 3
    Dernier message: 26/06/2009, 16h59
  3. Réponses: 1
    Dernier message: 02/07/2008, 19h49
  4. Renommer des fichiers en supprimant les doublons
    Par Serge63 dans le forum VBScript
    Réponses: 5
    Dernier message: 07/03/2008, 11h36
  5. Réponses: 2
    Dernier message: 21/02/2008, 13h29

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