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 :

Recherche croisée dans tableaux


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Recherche croisée dans tableaux
    Bonjour,

    J'ai un script qui exploite 2 tables différentes. J'arrive à connaitre la présence d'une chaine de caracteres du tableau 1 dans le tableau 2.
    Je voudrais pouvoir traiter la ligne du tableau 2 sur laquelle pointe ma recherche.

    Voici le code existant :
    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
    #!/usr/bin/perl
     
    $script_name = "update_footprint.pl";
     
    $CR5ROOT = $ENV { "CR5ROOT" };
    $CR5_PROJECT_ROOT = $ENV { "CR5_PROJECT_ROOT" };
     
    # $ARCH is needed by some cr5_func.pl subs
    $ARCH = "svr4";
    $ARCH = "nt86" if ($^O =~ /win/i); # some have MSWin32, some Windows_NT
     
    if ($ARCH ne "nt86")
    {
      die "ERROR: ARCH=$ARCH is not supported.";
    }
     
    if (-s "$CR5_PROJECT_ROOT/zeao/bin/cr5_func.pl")
    {
      require "$CR5_PROJECT_ROOT/zeao/bin/cr5_func.pl";
    }
    elsif (-s "$CR5ROOT/zeao/bin/cr5_func.pl")
    {
      require "$CR5ROOT/zeao/bin/cr5_func.pl";
    }
    else
    {
      print "Error in $script_name:  Not found:\n";
      print "  \$CR5_PROJECT_ROOT/zeao/bin/cr5_func.pl and\n";
      print "  \$CR5ROOT/zeao/bin/cr5_func.pl\n";
      $exit = 2;
      #goto Exit;
    }
    $fileParameter = "d:/DATA/Adeneo/ReUse/a_maj_footprint_module/extract_reuseprop.blp";
     
    $fileCount = 1;
    $NbPcb = 0;
    # Extraction BoardListProcessor sur le job et les modules
    # Le pcb de reference s appelle "job"
    # Les modules ont un nom qui commence par "4"
    @filelist = &find_files(".", ".pcb"); # from cr5_func.pl
            foreach $f (sort(@filelist))
          {
            if( $f =~ m/.pcb$/ ) {
    #print "toto\n";#Debug       
            $f = substr($f, 0, -4);
                  if( $f =~ "job") {
                     $fileFicListJ = "c:/temp/perl_footprintjob.txt";
                     #test l existance du fichier et destructuion si il existe
    	         if (-e $fileFicListJ)
    		   {
                        unlink $fileFicListJ;
    		   }
    print "job\n";#Debug
                     `blistp $f -p $fileParameter -o $fileFicListJ -m batch\n`;
                     } else {
                     if( $f =~ /^\.\/4/) {
                     $fileFicList = "c:/temp/perl_footprint_".$fileCount.".txt";
                     #test l existance du fichier et destructuion si il existe
    	         if (-e $fileFicList)
    	            {
                         unlink $fileFicList;
    		    }
    print "nonjob $f $fileFicList\n";#Debug
                    `blistp $f -p $fileParameter -o $fileFicList -m batch\n`;
                     $fileCount++;
                     $NbPcb++;
                     }
                     }
                  }
            }
    # Calcul du nb de PCB hors job
    # $NbPcb = $NbPcb-1;
    print "Il y a $NbPcb module(s)\n";#Debug
     
    # Traitement des reports du BoardListProcessor
    # Concateantion des différents modules
    $fileModu = "c:/temp/perl_footprintmodu.txt";
    #test l existance du fichier et destructuion si il existe
    	if (-e $fileModu)
    	{
    	unlink $fileModu;
    	}
     
    open MODU,">>$fileModu" or die "E/S : $!\n";
    for ($i = 1; $i <= $NbPcb; $i++)
        {
          open LIRE_MOD, "<c:/temp/perl_footprint_".$i.".txt" or warn "E/S : $!\n";
          while ($Ligne = <LIRE_MOD> ) {
           print MODU $Ligne;
           }
        }
    close <MODU>;
    # Traitement principal
    open JOB, "<$fileFicListJ" or warn "E/S : $!\n";
    open MODU, "<$fileModu" or warn  "E/S : $!\n";
     
    # Sauvagarde fichier dans un tableau
    # en même temps je fais un chomp sur chaque element
    map { chomp } @module = <MODU>;
    map { chomp } @job = <JOB>;
     
    print "$#job\n";#Debug
    print "$#module\n";#Debug
     
    $x=1;
    $y=1;
     
    while($x<=$#job){
    $job[$x] =~ s/\s+/ /g; #remplace des séries d'espaces par un seul
    @job_l = split (/ /, $job[$x]);
     
    #                        print "Ref ReUse : $job_l[1]\n";
    #                        print "X : $x\n";
            if (grep(/$job_l[1] /, @module)){print "$x : $job_l[1] present dans module\n"; }
            $x++;
     
            }
    Comment compléter cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (grep(/$job_l[1] /, @module)){print "$x : $job_l[1] present dans module\n"; }
    pour avoir le numéro de la ligne concernée dans le tableau 2 (module) ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Points : 14
    Points
    14
    Par défaut :resolu:
    J'ai trouvé une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @cmpsrc = grep(/$job_l[1] /, @module);
    Ensuite il me suffit de "jouer" avec le tableau "cmpsrc".

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 09/07/2008, 12h41
  2. [Tableaux] Recherche évoluée dans un array PHP
    Par fanfouer dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2008, 13h23
  3. Recherche croisées entre différents tableaux
    Par solorac dans le forum Excel
    Réponses: 2
    Dernier message: 12/06/2007, 10h49
  4. [Tableaux] Recherche LIKE dans le code Html
    Par lunick dans le forum Langage
    Réponses: 1
    Dernier message: 22/06/2006, 13h40
  5. [Tableaux] Recherche valeur dans tableaux
    Par Kaimann dans le forum Langage
    Réponses: 10
    Dernier message: 21/10/2005, 11h57

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