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 :

un hash de tableaux à partir d'un fichier txt


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut un hash de tableaux à partir d'un fichier txt
    bonsoir tous le monde
    desoler de vous déranger mais j'ai besoin encore de l'aide svp
    j'ai mon script pour faire un hash de tableaux à partir d'un fichier j'ai rempli mon hash normalement au début mais aprés je me suis appercu qu'il ya des cles qui se ressemble dans la ligne 135, 900 , et 947 je crois alors j'ai changé le motif mais j'ai perdu les valeurs de chaque cles , y'a plus de valeurs dans chacune des clés je vois pas ou est le probleme voilà mon code actuellement
    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
    @liste = grep {$_=~m/^T\d+|^###\s/}@taxonomy;
     
    my (%table_hash,$clades);
    my ($esp,$d);
    for (@liste){
     
          if   ($_ =~m/^###\s(\w+\s*\w*\s?\w*)/)     {$d=0;$clades=$1;}
     
    	  if   ($_=~m/^T\d+\t(\w+)\t/){$d++;${$table_hash{$clades}}[$d]=$1;}  
     
     
    }
     
    my @liste_cles = keys %table_hash;
    my $f=$#liste_cles+1;
    print "@liste_cles\t";  
    print "$f\n";
     
    print "@{$table_hash{Nematodes}}\n";
    merci par avance

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    la ligne 19 qui fait le probleme et c'est juste un exemple les (Nematodes=une des cles ) pour affichier la liste contenu dans cette cles
    merci bonne soirée tous le monde

  3. #3
    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
    Bonjour,
    Je n'ai pas les compétences de Lolo78, mais déjà il doit y avoir une erreur de }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	if   ($_ =~m/^###\s(\w+\s*\w*\s?\w*)/)     {$d=0;$clades=$1;}
    	if   ($_=~m/^T\d+\t(\w+)\t/){$d++;${$table_hash{$clades}}[$d]=$1;} 
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	if   ($_ =~m/^###\s(\w+\s*\w*\s?\w*)/)     {$d=0;$clades=$1};
    	if   ($_=~m/^T\d+\t(\w+)\t/){$d++;${$table_hash{$clades}}[$d]=$1};
    De plus, pour la plupart ici nous sommes ignorants en génétique.
    Pour pouvoir t'aider efficacement colle au moins :
    1) quelques lignes du fichier en entrée
    2) ce que tu veux obtenir en sortie

    [Sauf erreur, dans les données manipulées dans les posts précédents je ne vois pas de Nematodes]

    Ça sera déjà fait pour quand Lolo78 arrivera

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonjour
    toute idée ou aide est la bienvenue merci quand meme pour l'essaie ca fait vraiment plaisir d'etre sur ce site
    et aprés pour les Nematodes tu peux pas voir le fichier est trés grand
    je mettrai un extrait des premiers lignes à la fin ; ce que je veux est de prendre les lignes qui commencent par (###) mais pas #### ou ## comme clé et les especes (ex:hsa, mmu, ..)qui sont deriere la clés comme valeurs associe c à d un hash de tableaux pour les clés ya pas de probleme j'ai pu faire le motif qui détecte toute les 47 clés que je voulais mais pour les valeurs ca marche pas voilace que je veux en sortie
    % Vertebrates=>hsa ,cfa ,mmu ....;
    Alveolates =>xtr,...
    Nematodes=>....
    et voilà mon jeu de donnée
    et merci bcp
    # Eukaryotes
    ## Animals
    ### Vertebrates
    #### Mammals
    T01001 hsa H.sapiens Homo sapiens (human)
    T01005 ptr P.troglodytes Pan troglodytes (chimpanzee)
    T01028 mcc M.mulatta Macaca mulatta (rhesus monkey)
    T01002 mmu M.musculus Mus musculus (mouse)
    T01003 rno R.norvegicus Rattus norvegicus (rat)
    T01007 cfa C.familiaris Canis familiaris (dog)
    T01008 bta B.taurus Bos taurus (cow)
    T01009 ssc S.scrofa Sus scrofa (pig)
    T01068 decb E.caballus Equus caballus (horse)
    T01031 mdo M.domestica Monodelphis domestica (opossum)
    T01045 oaa O.anatinus Ornithorhynchus anatinus (platypus)
    #### Birds
    T01006 gga G.gallus Gallus gallus (chicken)
    #### Amphibians
    T01010 xla X.laevis Xenopus laevis (African clawed frog)
    T01011 xtr X.tropicalis Xenopus tropicalis (western clawed frog)
    #### Fishes
    T01004 dre D.rerio Danio rerio (zebrafish)
    T01056 dfru F.rubripes Fugu rubripes (Japanese puffer fish)
    T01061 dtni T.nigroviridis Tetraodon nigroviridis (green spotted puffer)
    T01069 dola O.latipes Oryzias latipes (Japanese medaka)
    ### Ascidians
    T01057 dcin C.intestinalis Ciona intestinalis (sea squirt)
    T20027 ecsv C.savignyi_est Ciona savignyi (EST)
    T20029 emte M.tectiformis_est Molgula tectiformis (EST)
    ### Echinoderms
    T01019 spu S.purpurat

  5. #5
    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
    Merci pour l'extrait !
    On a une meilleure idée de la structure.

    Je laisse aux spécialistes des regex le soin de t'aider !

    Mais quelques remarques qui n'engagent que moi :
    1) Tu précises que le fichier est très gros
    2) Visiblement c'est une structure très hiérarchique
    3) ... et plein d'autres du même genre sur ce que je vois à priori

    Réflexion :
    Il me semble qu'une base de données relationnelle bien structurée, permettrait d'extraire plus facilement les informations à la demande

    Avantages :
    - Plus de risque de pb d'espace mémoire
    - Contraintes d’intégrités (cohérence des données) gérées par le SGBD
    - Indépendance de la structure des données et des traitements :
    - Surtout : plus besoin de connaître la forme précises des données (ça commence par ##, ça doit commencer par -, avoir au moins 3 caractères mais pas plus de 5...) source d'erreur et LOURDINGUE

    Question (seulement si tu as le temps) :
    Les généticiens travaillent-ils uniquement avec des fichiers texte, ou bien ont-ils à leur disposition des logiciels qui permettent de faire des manipulations de données ensemblistes (genre langage SQL)

    Pour info Oracle offre une version complète seulement limitée en taille SGA,
    Ça vaudrait le coup de s'y intéresser je crois...

  6. #6
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    l'expression régulière "/^###\s.../ devrait suffire à ne garder que les lignes commençant par trois signes dièse (et seulement trois), puisqu'elle recherche un espace juste après le troisième signe dièse. Elle devrait donc marcher dans ton cas, à condition qu'il y ait toujours un espace après les dièses.

    Une façon plus générale de ne garder que les lignes commençant pas exactement trois signes dièse (et pas plus de 3) serait:
    qui recherche trois signes dièse suivis d'un caractère quelconque autre qu'un signe dièse. Mais, encore une fois, ta regex devrait suffire s'il y a bien toujours un espace après les dièses.

    A la lecture de ton code, je pense que cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @liste = grep {$_=~m/^T\d+|^###\s/}@taxonomy;
    n'est pas vraiment utile, elle effectue une copie intermédiaire du tableau en entrée (ce qui peut consommer des ressources et du temps si les données en entrée sont volumineuses), alors que tu peux filtrer les données à la volée. Par exemple, à la lecture du tableau @taxonomy, tu peux faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (@taxonomy) {
        next unless /^T\d+|^###\s/;    # passer à l'enregistrement suivant si le motif de début de ligne ne nous intéresse pas
        # suite de tes recherches ...
    }
    Je ne suis pas bien sûr d'à quoi sert ta variable $d, mais je pense que ça ne marche pas comme tu voudrais.

    Voici une proposition à tester:
    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
     
    use strict;
    use warnings;
    use Data::Dumper;
     
    my (%table_hash,$clades);
    for (@taxonomy){
        next unless /^T\d+|^###\s/;
        if   ($_ =~m/^###\s(\w+\s*\w*\s?\w*)/)   {
            $clades=$1;
        }
        if   ($_=~m/^T\d+\s+(\w+)\s+/) {
            push @{$table_hash{$clades}}, $1;
        }
    }
    print Dumper \%table_hash;
    Avec les six premières lignes de ton exemple de données, cela me donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $VAR1 = {
              'Vertebrates' => [
                                 'hsa',
                                 'ptr'
                               ]
            };
    (D'ailleurs, je te recommande de tester au début avec un fichier en entrée bien plus petit que la totalité de tes données, cela facilite les tests.)

    Mais je ne suis pas sûr que le résultat obtenu dans %table_hash soit vraiment ce que tu recherches (on perd l'information Txxxxx, mais peut-être que tu n'en as pas besoin).

    Note: je ne suis pas entièrement convaincu par l'utilisation d'une base de données proposée par Dmganges, car il faut commencer par l'alimenter et cela peut être plus compliqué que simplement traiter les lignes en entrée (mais ça dépend d'éventuels autres traitements ensuite). Mais si tu veux utiliser une base de données, il existe des solutions open source, gratuites et simples sans passer par Oracle, comme par exemple SQLite, MySQL ou MariaDB.

  7. #7
    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
    Citation Envoyé par Lolo78
    Note: je ne suis pas entièrement convaincu par l'utilisation d'une base de données proposée par Dmganges, car il faut commencer par l'alimenter et cela peut être plus compliqué que simplement traiter les lignes en entrée (mais ça dépend d'éventuels autres traitements ensuite). Mais si tu veux utiliser une base de données, il existe des solutions open source, gratuites et simples sans passer par Oracle, comme par exemple SQLite, MySQL ou MariaDB.
    Oui ça dépend d'éventuels traitements ensuite...
    Il est évident que s'il y a un seul traitement à réaliser, le traitement séquentiel des données d'un fichier en entrée est imbattable.
    Par contre s'il faut charger en mémoire la totalité des infos plusieurs fois pour faire des sélections à la demande, au coup par coup, en performance ça ne vaut plus rien.

    J'ai proposé Oracle car c'est celui que je connais le mieux, je sais aussi que les licences sont hors de prix, mais Oracle propose depuis la V5 (~1989) la possibilité de parcourir une table (ou plusieurs) suivant une structure hiérarchique. En 2000 à ma connaissance c'était encore le seul à offrir cette possibilité.
    Je n'en suis pas certain, mais ça pourrait s'avérer utile en génétique

    NB : Oracle qui distribue gratuitement MySQL c'est bien garder d'y apporter cette superbe fonctionnalité.
    Ceci dit MySQL doit permettre de faire de très belles choses aussi...

    En ce qui concerne l'alimentation de la base, à partir des données fournies par abdou, actuellement, au pif, c'est 2 tables (d'accord en faisant ça comme un cochon, mais avec en retour la puissance du SQL), et pour peu que l'on construise les index après le chargement des données..

    De plus Perl permet d'accéder aux bases relationnelles...
    Ce qui permet tout en restant dans Perl, une fois la sélection SQL faite dans les meilleurs délais, d'affiner en regex si nécessaire, car j'en conviens, SQL n'est pas adapté au traitement de chaînes de caractères.

    Quant aux comptages demandés jusqu'à présent, ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*)
    from table
    where espece = 'Nematodes';
    Y pas photo quand même, OK je ne prends pas le plus difficile

    Après coup en cherchant un peu, j'ai trouvé un peu d'info sur les BDD en génétique
    Donc @abdou j'ai une réponse suffisante (pour l'instant)

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonjour
    pour les clés qui commence par 3# j'ai allangé le motif par ce que j'ai trouvé qu'il ya des données qui se repete genre
    ### Green algue
    ### Red algue
    la variable $d est pour me compter les lignes je suis pas sur que c'est necessaire mais la fonction grep est juste pour suivre les étapes c'est complémentaire comme le next unless dans votre code


    il reste un probleme est que j'ai pas le droit d'utiliser les modules Dumper ce n'est pas accepté , j'espere que ca va marcher sans avoir besoin au module

    pour dmgange , franchement j'ai pas une idée précise comment ils traitent leurs données j'imagine que les bioinformaticiens qui font l'analyse à leurs place , mais les chercheurs s'interesse que de la manip et les experience, moi j'étais pas dans ce domaine , j'étai en santé animale , je suis tombé malade donc j'ai changé la branche parceque je peux plus exercer au domaine vétérinaire c'est pour ca je galere dans un domaine nouveau pour moi mais qui me plait

    en fin , j'essaye le code de lolo78 , et je revient
    merci pour tout

  9. #9
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Abdou,

    je n'utilise Data:: Dumper que pour bien visualiser la structure des données produite (le hachage de tableaux), ce module est un instrument de débogage plus que de production, ce module n'est certainement pas nécessaire pour ton traitement.

    Cela dit, pourquoi n'aurais-tu pas le droit de l'utiliser? C'est un module standard, livré en standard avec toute distribution de Perl. A moins bien sûr que ce soit un enseignant qui ait interdit l'utilisation de bibliothèques externes. Mais même alors, tu peux toujours l'utiliser pour ta mise au point du programme jusqu'à ce qu'il fonctionne correctement.

    Laurent.

  10. #10
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je voulais dire qu'alimenter une base de données implique de définir un schéma, créer des tables et des index, surtout de décortiquer le fichier en entrée et de le charger (sans parler de l'installation du système de gestion de la base, etc.), calculer les index, les stats, et ainsi de suite.

    Et j'ai encore eu un cas récemment où une équipe de ma boîte a demandé mon aide pour une requête sous Access qui plantait près avoir mouliné pendant sept jours. J'ai pris une journée (y compris l'installation sur un de leur PC de Cygwin avec Perl) pour écrire un programme Perl qui analysait les données en entrée et renvoyait le résultat en moins de 20 minutes de traitement. OK, Oracle est sans doute plus efficace et surtout plus robuste qu'Access, mais tout de même, un SGBDR n'est pas la solution à tout, tant s'en faut.

    Citation Envoyé par dmganges Voir le message

    Quant aux comptages demandés jusqu'à présent, ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*)
    from table
    where espece = 'Nematodes';
    Y pas photo quand même, OK je ne prends pas le plus difficile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $count = scalar grep /Nematodes/, @data;

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonsoir;

    je vous remercie tous

    je sais pas comment ca a marché mais j'ai fait une petite exemple , j'ai fait ensuite copie/coller et ca marche , j'ai fait qu'une petite modification au code de lolo au niveau du motif et ca a marché
    bonne soirée à vous tous ,
    encore merci

  12. #12
    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
    @Lolo78
    Je suis d'accord sur un SGBDR n'est pas la solution à tout et sur l'investissement : formation, installation, schéma, normalisation...
    C'est même un très gros investissement au départ par rapport à la solution fichier.
    On y trouve son compte seulement comme je l'ai déjà écrit pour faire des sélections à la demande, au coup par coup sur de très gros volumes d'infos.
    Et j'ajoute si la base est consultée par un nombre important de personnes...
    Ce n'est pas le cas ici...

    Cependant en prenant les exemples dans la FAQ on peut voir que créer deux ou trois tables et écrire quelques requêtes de base n'est tout de même pas la mer à boire.
    Dans le cas présent on doit même pouvoir faire (très cochon) sur une seule table, ce qui revient à un fichier, mais avec la possibilité de créer un bon nombre d'index ne serait-ce que pour s'entrainer au SQL

    J'ai eu aussi le cas de requêtes qui duraient des heures, et qui passaient à quelques secondes seulement en contraignant le SGBD à ne pas utiliser un index... le cas est classique
    et j'ai passé plusieurs heures sur des requêtes hiérarchiques imbriquées, mais jamais j'aurais pu obtenir les mêmes résultats sur une organisation en fichiers.

    abdou3058 s'est présenté comme étudiant, je veux bien parier que dans les 40 ans qui viennent il aura à se frotter à une DBR, autant ne pas le décourager !
    Personnellement travailler 15 ans avec le couple Unix/Oracle a été un véritable bonheur
    C'est ce que je voudrais faire partager...

    select count(*) c'est un peu une boutade, je ne peux pas m'en empêcher

    Une déconnexion intempestive du forum m'a permis de voir que c'est réglé pour abdou3058, tout va donc pour le mieux !

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonsoir ;
    oui je savais pas , j'ai cru qu'il aide à quelque chose dans le programme au début , tous fonctionne correctement je suis à la derniere étape de la question puis je commence la derniere partie du projet je suis trés reconnaissant pour l'aide que vous m'avez apporté
    pour

    @lolo78 ,

    je suis ton conseil je fait que des petits exemples et j'applique sur le fichier ca marche pârfaitement merci

    pour @dmgange
    merci bcp , franchement ce domaine je l'ai pas choisi , ce que j'ai choisi c'est des études vétérinaire , mais malheureusement j'ai pas pu continue dans ce domaine alors je suis venu en france à là je me reconstruit dans un nouveau domaine , une nouvelle langue , autre culture que j'aime beaucoup je vous remercie
    bonne soirée

  14. #14
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    OK, Dmganges, je travaille presque tous les jours avec diverses bases de données (dont certaines gèrent 35 millions de clients), je ne suis bien sûr pas contre les bases de données. C'est évidemment une des solutions à privilégier pour des données persistantes que l'on consulte fréquemment ou plus généralement pour des applications de gestion devant travailler dans la durée.

    J'objectais, ou plutôt j'avais quelques réticences, uniquement dans le cas d'un traitement ponctuel, surtout s'agissant d'un fichier facile à traiter (et pouvant être traité ligne à ligne, même si Abdou a choisi en l'occurrence de le charger dans un tableau, ce que je n'aurais pas fait) et ne nécessitant pas d'accès aléatoire aux données. Dans ce genre de cas, on peut avoir fini le traitement en moins de temps qu'il n'en faut pour seulement charger les données en base.

    Dans une vidéo prise lors des Journées Perl 2013 à Nancy (http://djibril.developpez.com/tutori...perl/2013/#LXV), je montre comment j'ai pu faire passer un traitement en base de données prenant 60 jours à un traitement Perl en mémoire (nombreux hachages contenant le paramétrage) ne prenant plus qu'une douzaines d'heures.

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonsoir
    juste une petite qst lolo78 svp j'essaie de faire une condition dans une autre condition , ca marche pas vous avez une idée ??,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach (@lins){
    if ($_=~m/\s(\w{3,4}):\w+.*\s(.+)\s(\d+\.?\d*)$/){
     
         if ($2<10**-5)&&($3>50){print "$1:$3\n";}
     
     
    #print "$1:$2:$3\n";
     
     
    }
     
     
    }

  16. #16
    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
    Citation Envoyé par Lolo78
    je montre comment j'ai pu faire passer un traitement en base de données prenant 60 jours à un traitement Perl en mémoire (nombreux hachages contenant le paramétrage) ne prenant plus qu'une douzaines d'heures.
    Tu as bien fait de la mettre à la poubelle !
    60 jours de traitement sur une BDR il y a un pb de schéma ou de stratégie dans le choix BDD.

    Perso j'avais des bases pas très volumineuses ~200Go mais des schémas complexes, plusieurs milliers d'utilisateurs en consultation et mises à jour, une quinzaine de requêtes par seconde en période de pointe.
    Entre autre, une douzaine de bases Oracle sur un cluster HP 2 nœuds 8 CPU chacun, accédant à qq To en raid 5
    Jamais une bavure due au SGBD, c'est confortable !
    Je rejetais toutes requêtes qui prenait plus de 2s.

    Dans le cas présent la solution BDD, même rudimentaire, serait un luxe, j'en conviens, sauf si on a déjà le SGBD d'installé et les compétences à disposition.
    Quoique, nous sommes déjà à plusieurs requêtes simples sur un même lot de données important et dont la structure ne semble pas très complexe, du moins pour l'instant...

    Ceci dit je me régale de voir ce que tu fais en Perl

  17. #17
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par abdou3058 Voir le message
    juste une petite qst lolo78 svp j'essaie de faire une condition dans une autre condition , ca marche pas
    "Ça ne marche pas" est un diagnostic hautement insuffisant. Est-ce que ça plante? Tu as un message d'erreur ou un warning? Ou juste, ça ne fait rien?

    Pourrais-tu fournir un ou plusieurs exemples de lignes ou chaînes de caractères pour lesquelles tu penses que tes expressions régulières devraient à ton avis fournir des résultats, ainsi que le résultat que tu attends?

  18. #18
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Une alternative à l'usage de Data::Dumper pour le déboggage, c'est justement le debugger... trop de développeurs débutants ignorent son existence, alors qu'il est d'un usage on ne peut plus simple :
    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
    perl -d <script.pl>
      DB<1> h
    List/search source lines:               Control script execution:
      l [ln|sub]  List source code            T           Stack trace
      - or .      List previous/current line  s [expr]    Single step [in expr]
      v [line]    View around line            n [expr]    Next, steps over subs
      f filename  View source in file         <CR/Enter>  Repeat last n or s
      /pattern/ ?patt?   Search forw/backw    r           Return from subroutine
      M           Show module versions        c [ln|sub]  Continue until position
    Debugger controls:                        L           List break/watch/actions
      o [...]     Set debugger options        t [n] [expr] Toggle trace [max depth] ][trace expr]
      <[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set breakpoint
      ! [N|pat]   Redo a previous command     B ln|*      Delete a/all breakpoints
      H [-num]    Display last num commands   a [ln] cmd  Do cmd before line
      = [a val]   Define/list an alias        A ln|*      Delete a/all actions
      h [db_cmd]  Get help on command         w expr      Add a watch expression
      h h         Complete help page          W expr|*    Delete a/all watch exprs
      |[|]db_cmd  Send output to pager        ![!] syscmd Run cmd in a subprocess
      q or ^D     Quit                        R           Attempt a restart
    Data Examination:     expr     Execute perl code, also see: s,n,t expr
      x|m expr       Evals expr in list context, dumps the result or lists methods.
      p expr         Print expression (uses script's current package).
      S [[!]pat]     List subroutine names [not] matching pattern
      V [Pk [Vars]]  List Variables in Package.  Vars can be ~pattern or !pattern.
      X [Vars]       Same as "V current_package [Vars]".  i class inheritance tree.
      y [n [Vars]]   List lexicals in higher scope <n>.  Vars same as V.
      e     Display thread id     E Display all thread ids.
    For more help, type h cmd_letter, or run man perldebug for all docs.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  19. #19
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Une alternative à l'usage de Data::Dumper pour le déboggage, c'est justement le debugger... trop de développeurs débutants ignorent son existence, alors qu'il est d'un usage on ne peut plus simple :
    Entièrement d'accord avec Philou, ++.

    Pour une information assez détaillée sur le sujet, voir la FAQ sur le debugger Perl.

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2016
    Messages : 66
    Points : 40
    Points
    40
    Par défaut
    bonjour ;
    ca a marché , j'ai rajouté que les parenthese aprés le if je crois , merci
    bonne journée à tous

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Remplir plusieurs tableaux à partir d'un fichier XML
    Par MarsVolta dans le forum VBA Word
    Réponses: 2
    Dernier message: 15/05/2016, 20h52
  2. [Tableaux] transformation d'un fichier txt en xml
    Par edophie dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2006, 12h55
  3. Réponses: 3
    Dernier message: 08/08/2006, 02h50
  4. Réponses: 4
    Dernier message: 19/03/2006, 15h20
  5. Réponses: 4
    Dernier message: 27/07/2005, 11h51

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