Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1340 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[perl] Probleme double lecture

n°2065084
shadow19c
Posté le 21-03-2011 à 14:18:25  profilanswer
 

Reprise du message précédent :
En fait quest ce que je dois modifier dans le programme deux, je comprends pas.
JE voulais savoir ca serait pas mieux de tout mettre dans le programme un qui fqit les hash apres la creation du fichier out.bl direct je fais la recherche?
Jai une erreur Missing right curly or square bracket at dnadata.pm line 117, at end of line
syntax error at dnadata.pm line 117, at EOF
Compilation failed in require at test3.pl line 4.
BEGIN failed--compilation aborted at test3.pl line 4.

Message cité 1 fois
Message édité par shadow19c le 21-03-2011 à 14:20:17
mood
Publicité
Posté le 21-03-2011 à 14:18:25  profilanswer
 

n°2065092
gilou
Modérateur
Modzilla
Posté le 21-03-2011 à 14:27:40  profilanswer
 

shadow19c a écrit :

En fait quest ce que je dois modifier dans le programme deux, je comprends pas.

Le début et la fin. c'est clair dans ce que j'ai écrit.

 
shadow19c a écrit :

JE voulais savoir ca serait pas mieux de tout mettre dans le programme un qui fqit les hash apres la creation du fichier out.bl direct je fais la recherche?

C'est comme ça qu'on fabrique des bouses inutilisables.

 
shadow19c a écrit :

Jai une erreur Missing right curly or square bracket at dnadata.pm line 117, at end of line
syntax error at dnadata.pm line 117, at EOF
Compilation failed in require at test3.pl line 4.
BEGIN failed--compilation aborted at test3.pl line 4.


Chez moi ça marche:
dnadata.pm

Code :
  1. #!/usr/bin/perl
  2. package dnadata;
  3. use strict;
  4. use warnings;
  5. #use autodie qw(open close);   # open/close succeed or die
  6. use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
  7. require Exporter;
  8.  
  9. @ISA = qw(Exporter AutoLoader);
  10. @EXPORT = qw(processFile);
  11. $VERSION = '0.1';
  12.  
  13.  
  14. sub processFile {
  15.  my ($filename, $Query_string, $Query_positions, $Sbjct_string, $Sbjct_positions) = @_;
  16.  # creation des structures associées a une ligne utile
  17.  my $Query = initStructure($Query_string, $Query_positions);
  18.  my $Sbjct = initStructure($Sbjct_string, $Sbjct_positions);
  19.  
  20.  open my $fh, '<', "$$filename";
  21.  my ($linenum, $bloc, $part) = (0, 0, 0);
  22.  use constant {
  23.    STATE_START  => 0,
  24.    STATE_SCORE  => 1,
  25.    STATE_QUERY  => 2,
  26.    STATE_SBJCT  => 3,
  27.  };
  28.  my $state = STATE_START;
  29.  while (<$fh> ) {
  30.    ++$linenum;
  31.    if (/^Score\s+=/) {
  32.      ++$bloc;
  33.      $part = 0;
  34.      if (($state != STATE_START) && ($state != STATE_SBJCT)) {
  35.     print "Warning: Unexpected Score at line $linenum\n";
  36.      }
  37.      $state = STATE_SCORE;
  38.    }
  39.    if (/${$Query->{pattern}}/o) {
  40.      ++$part;
  41.      adjustData($Query->{data}, $1, $2, $3);
  42.      if (($state != STATE_SCORE) && ($state != STATE_SBJCT)) {
  43.     print "Warning: Unexpected Query at line $linenum\n";
  44.      }
  45.      $state = STATE_QUERY;
  46.    }
  47.    if (/${$Sbjct->{pattern}}/o) {
  48.      adjustData($Sbjct->{data}, $1, $2, $3);
  49.      if ($state != STATE_QUERY) {
  50.     ++$part;
  51.     print "Warning: Unexpected Sbjct at line $linenum\n";
  52.      }
  53.      else {
  54.     processBlocPart($bloc, $part, $Query, $Sbjct);
  55.      }
  56.      $state = STATE_SBJCT;
  57.    }
  58.  }
  59.  close $fh;
  60.  if ($state != STATE_SBJCT) {
  61.    print "Warning: Unexpected end of file\n";
  62.  }
  63. }
  64.  
  65. # cree la structure associee a une ligne de donnees interessantes
  66. sub initStructure {
  67.  my ($pattern, $position) = @_;
  68.  my $hashref = {
  69.          pattern   => $pattern,  #reference sur la chaine de pattern
  70.          positions => $position, #reference sur l'array des positions
  71.          data => {               #reference sur un hash des infos de la ligne
  72.               start => 0,
  73.               end   => 0,
  74.               line  => "",
  75.              },
  76.         };
  77.  return $hashref;
  78. }
  79.  
  80. # remplit les champs d'un hash data passée par reference
  81. sub adjustData {
  82.  my $dataref = shift;
  83.  $dataref->{start} = shift;
  84.  $dataref->{line}  = shift;
  85.  $dataref->{end}   = shift;
  86. }
  87.  
  88. # on a une portion de bloc, on regarde si on a des matches pour les positions cherchees
  89. sub processBlocPart {
  90.  my ($bloc, $part, $Query, $Sbjct) = @_;
  91.  foreach my $l (@{$Query->{positions}}) {
  92.    next if ($l < $Query->{data}->{start});
  93.    last if ($l > $Query->{data}->{end});
  94.    my $c = substr($Query->{data}->{line}, $l - $Query->{data}->{start}, 1);
  95.    my $d = substr($Sbjct->{data}->{line}, $l - $Query->{data}->{start}, 1);
  96.    next if ($c =~ m/[-X]/ or $d =~ m/[-X]/);
  97.    my $k = $l - $Query->{data}->{start} + $Sbjct->{data}->{start};
  98.    print "Testing in bloc $bloc, part $part: positions ($l, $k) values ($c, $d): " ;
  99.    if (grep {$_ eq $k} @{$Sbjct->{positions}} ) {
  100.      print "Found a match!\n" ;
  101.    } else {
  102.      print "no match.\n" ;
  103.    }
  104.  }
  105. }
  106.  
  107. 1;
  108. __END__
 

et pour le programme de test du module (correspond a ce qui est a incorporer dans ton programme principal)
call_dnadata.pl

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use dnadata;
  6.  
  7. # modifiable si le format du fichier change
  8. my $Query_string = '^Query:\s(\d+)\s+(.+)\s(\d+)\s*$';
  9. my $Sbjct_string = '^Sbjct:\s(\d+)\s+(.+)\s(\d+)\s*$';
  10. # peut être passé en parametre au script, etc
  11. my @Query_positions = (24,48,54,92,137,235,275,324);
  12. my @Sbjct_positions = (26,65,145,189);
  13. # fichier de données
  14. my $filename = "dnadata1.txt";
  15.  
  16. processFile(\$filename, \$Query_string, \@Query_positions, \$Sbjct_string, \@Sbjct_positions);
 

A+,

  



Message édité par gilou le 21-03-2011 à 14:28:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2065094
shadow19c
Posté le 21-03-2011 à 14:34:14  profilanswer
 

La cest trop complique , je veux juste savoir si je peux pas incorporer ce programme

Code :
  1. #!/usr/bin/perl
  2.     use strict;
  3.     use warnings;
  4.     #use autodie qw(open close);   # open/close succeed or die
  5.  
  6.     # modifiable si le format du fichier change
  7.     my $Query_string = '^Query:\s(\d+)\s+(.+)\s(\d+)\s*$';
  8.     my $Sbjct_string = '^Sbjct:\s(\d+)\s+(.+)\s(\d+)\s*$';
  9.     # peut être passé en parametre au script, etc
  10.     my @Query_positions = (24,48,54,92,137,235,275,324);
  11.     my @Sbjct_positions = (26,65,145,189);
  12.     # fichier de données
  13.     my $filename = "out.bl";
  14.  
  15.     # On fait tout dans une subroutine histoire d'avoir le tout bien modulaire
  16.     # et les parametres importants comme parametres de la subroutine, ce qui
  17.     # facilitera l'écriture avec passage des parametres sur la ligne de commande
  18.     # du script (l'extension logique de ce script)
  19.     processFile(\$filename, \$Query_string, \@Query_positions, \$Sbjct_string, \@Sbjct_positions);
  20.  
  21.     sub processFile {
  22.      my ($filename, $Query_string, $Query_positions, $Sbjct_string, $Sbjct_positions) = @_;
  23.      # creation des structures associées a une ligne utile
  24.      my $Query = initStructure($Query_string, $Query_positions);
  25.      my $Sbjct = initStructure($Sbjct_string, $Sbjct_positions);
  26.  
  27.     open my $fh, "<$$filename" or die "error opening $$filename $!.\n";
  28.      my ($linenum, $bloc, $part) = (0, 0, 0);
  29.      use constant {
  30.        STATE_START  => 0,
  31.        STATE_SCORE  => 1,
  32.        STATE_QUERY  => 2,
  33.        STATE_SBJCT  => 3,
  34.      };
  35.      my $state = STATE_START;
  36.      while (<$fh> ) {
  37.        ++$linenum;
  38.        if (/^Score\s+=/) {
  39.          ++$bloc;
  40.          $part = 0;
  41.          if (($state != STATE_START) && ($state != STATE_SBJCT)) {
  42.         print "Warning: Unexpected Score at line $linenum\n";
  43.          }
  44.          $state = STATE_SCORE;
  45.        }
  46.        if (/${$Query->{pattern}}/o) {
  47.          ++$part;
  48.          adjustData($Query->{data}, $1, $2, $3);
  49.          if (($state != STATE_SCORE) && ($state != STATE_SBJCT)) {
  50.         print "Warning: Unexpected Query at line $linenum\n";
  51.          }
  52.          $state = STATE_QUERY;
  53.        }
  54.        if (/${$Sbjct->{pattern}}/o) {
  55.          adjustData($Sbjct->{data}, $1, $2, $3);
  56.          if ($state != STATE_QUERY) {
  57.         ++$part;
  58.         print "Warning: Unexpected Sbjct at line $linenum\n";
  59.          }
  60.          else {
  61.         processBlocPart($bloc, $part, $Query, $Sbjct);
  62.          }
  63.          $state = STATE_SBJCT;
  64.        }
  65.      }
  66.      close $fh;
  67.      if ($state != STATE_SBJCT) {
  68.        print "Warning: Unexpected end of file\n";
  69.      }
  70.     }
  71.  
  72.     # cree la structure associee a une ligne de donnees interessantes
  73.     sub initStructure {
  74.      my ($pattern, $position) = @_;
  75.      my $hashref = {
  76.              pattern   => $pattern,  #reference sur la chaine de pattern
  77.              positions => $position, #reference sur l'array des positions
  78.              data => {               #reference sur un hash des infos de la ligne
  79.                   start => 0,
  80.                   end   => 0,
  81.                   line  => "",
  82.                  },
  83.             };
  84.      return $hashref;
  85.     }
  86.  
  87.     # remplit les champs d'un hash data passée par reference
  88.     sub adjustData {
  89.      my $dataref = shift;
  90.      $dataref->{start} = shift;
  91.      $dataref->{line}  = shift;
  92.      $dataref->{end}   = shift;
  93.     }
  94.  
  95.     # on a une portion de bloc, on regarde si on a des matches pour les positions cherchees
  96.     sub processBlocPart {
  97.      my ($bloc, $part, $Query, $Sbjct) = @_;
  98.      foreach my $l (@{$Query->{positions}}) {
  99.        next if ($l < $Query->{data}->{start});
  100.        last if ($l > $Query->{data}->{end});
  101.        my $c = substr($Query->{data}->{line}, $l - $Query->{data}->{start}, 1);
  102.        my $d = substr($Sbjct->{data}->{line}, $l - $Query->{data}->{start}, 1);
  103.        next if ($c =~ m/[-X]/ or $d =~ m/[-X]/);
  104.        my $k = $l - $Query->{data}->{start} + $Sbjct->{data}->{start};
  105.        print "Testing in bloc $bloc, part $part: positions ($l, $k) values ($c, $d): " ;
  106.        if (grep {$_ eq $k} @{$Sbjct->{positions}} ) {
  107.          print "Found a match!\n" ;
  108.        } else {
  109.          print "no match.\n" ;
  110.        }
  111.      }
  112.     }


 
Dans celui la

Code :
  1. #!/usr/local/bin/perl
  2.     use strict;
  3.     use warnings;
  4.  
  5.     do_something("coco_cds" );
  6.     do_something("aster_cds" );
  7.    
  8.     open my $desc, '<', "RBH.txt";
  9.     while (my $ligne1 = <$desc> ) {
  10.      my ($id1, $id2) = split(/\t/, $ligne1);
  11.      system("formatdb -o -pT -i DB.pep" );
  12.      system("fastacmd -d DB.pep -s $id1>cv" );
  13.      system("fastacmd -d DB.pep -s $id2>ast" );
  14.      system("bl2seq -i cv -j ast -p blastp -o out.bl -e 1.e-5" );
  15.     }
  16.     close $desc;
  17.    
  18.    
  19.    
  20.     sub do_something {
  21.      my $filename = shift;
  22.      open my $desc, '<', $filename;
  23.      while (my $line = <$desc> ) {
  24.        next if ($line =~ m/^\#/);
  25.        chomp $line;
  26.        my ( $id, $strand, $coord) = $line =~ m/[\w-]+\t([\w-]+)\t\d+\t([-+])\tORIGINAL JGI\t\d+\t[\#\w\.]+\t([,\d\.]+)/;
  27.        my @exon = split (/,/, $coord);
  28.        my @intron = ($coord =~ m/(\d+,\d+)/g);
  29.        if ($strand eq '-') {
  30.          @exon = reverse(@exon);
  31.          @intron = reverse(@intron);
  32.        }
  33.    
  34.        my $cds;
  35.        my %hash;
  36.        # 3777..3857,4046..4192,4443..4561,4940..5234,5406..5540,5734..5847,6009..6098,6421..6492
  37.        #          324
  38.      
  39.        for my $i (0..$#intron) {
  40.          my ($s, $e) = split(/,/, $intron[$i]);
  41.          my $taille = abs($e-$s+1);
  42.          my ($s2, $e2) = split(/\.\./, $exon[$i]);
  43.          my $taille2 = abs($e2-$s2+1);
  44.          $cds += $taille2;
  45.          my $aa = int($cds/3);
  46.          $hash{$id}{$aa}=$taille;
  47.        }
  48.      }
  49.      close $desc;
  50.     }


 
en sachant que je dois enlever dans le premier programme les positions et recuperer les positions pour Query chez Cv-/*** et subject chez Aster-***

n°2065099
gilou
Modérateur
Modzilla
Posté le 21-03-2011 à 14:51:09  profilanswer
 

shadow19c a écrit :

La cest trop complique , je veux juste savoir si je peux pas incorporer ce programme
............................
en sachant que je dois enlever dans le premier programme les positions et recuperer les positions pour Query chez Cv-/*** et subject chez Aster-***


Bon, je suis désolé, mais il n'est pas dans mes habitudes d'aider a faire de programmes mal architecturés.
Donc si l'aide que je vous ai apportée ne vous a pas convenu, je pense qu'il est préférable de ma part que j'en reste la.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2065107
shadow19c
Posté le 21-03-2011 à 15:33:22  profilanswer
 

Merci en tout cas , et bon apres midi a vous

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[resolu] problème d'injection SQL, doctrine orm[Resolu][perl tk] caractère spéciaux dans une listbox (genre àéè...)
Probleme sur href et mailto[Résolu] Problème clause is ambiguous
Probleme avec stateApache + SVN, problème d'authentification
Macro Excel - Problème avec ActiveCell.Font.ColorIndexprobleme avec un JAVA suivant le serveur
Plus de sujets relatifs à : [perl] Probleme double lecture


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR