#!/usr/bin/perl # # MARTIN # # routine pour passer un fichier du format carthagene au format rhmap # $[ = 1; # set array base to 1 $, = ' '; # set output field separator $\ = "\n"; # set output record separator # { ((($ficin,$ficout) = @ARGV) == 2 && -r $ficin) || die "PROBLEME d'arguments \n\n USAGE: maptorhmap.pl fichierentre fichiersortie\n\n"; open(SAVEERR, ">&STDERR"); #open(STDERR, ">formate.err") || die "==> PB ouverture stderr : formate.err"; select(STDERR); $| =1; # open(FIN,"<$ficin") || die "=> PB ouverture : $ficin "; open(FOUT,">$ficout") || die "=> PB ouverture : $ficout "; @tableau = ; @ligne= split( " ",$tableau[2]); $nbm = $ligne[2]; $nbi = $ligne[1]; # # Ecriture 1ere ligne : un probleme, nbm loci, nbi individu, screen option # printf FOUT "%4.4s%4.4s%4.4s%4.4s\n",1,$nbm,$nbi,1; # # Ecriture 2eme ligne : nom des marqueurs 20 par ligne # $combien=0; for ($i=1 ; $i <= $nbm; $i++) { printf FOUT "%-4.4s","M$i"; $combien++; if ($combien == 20) { printf FOUT "\n";$combien=0;} } if ($combien != 0) {printf FOUT "\n";} # # Ecriture 3eme ligne : format de lecture des lignes d'individus # printf FOUT "(A4,%s(1X,A1),T5,I1)\n",$nbm; # # Ecriture 4eme ligne : codage present, absent, manquant # printf FOUT "+-?\n"; # # Ecriture nbi ligne : No individus, pour chaque marqueurs codage # for ($i=1 ; $i <= $nbi; $i++) { printf FOUT "%4.4s","$i"; for ($j=1 ; $j <= $nbm; $j++) { @ligne=split( " ",$tableau[$j+2]); @col=split("",$ligne[2]); $signe = (($col[$i] eq 'H') ? "+" : ( ($col[$i] eq '-') ? "?" : (($col[$i] eq 'A') ? "-" : $col[$i]))); #$signe= ($col[$i] eq 'A') ? "-" : $col[$i]; printf FOUT " %1.1s",$signe; } printf FOUT " \n"; } # # Ecriture nbm , equal retention, list of locus order, partially typed, # no upper bound et autres pour le probleme # printf FOUT "%4.4s 1 1 1 0 0 0 0.0\n", $nbm; # # Ecriture 2eme ligne : nom des marqueurs 20 par ligne # $combien=0; for ($i=1 ; $i <= $nbm; $i++) { printf FOUT "%-4.4s","M$i"; $combien++; if ($combien == 20) { printf FOUT "\n";$combien=0;} } if ($combien != 0) {printf FOUT "\n";} printf FOUT "%4.4s\n",1; # # Ecriture # printf FOUT "(%sA4)\n",$nbm; # for ($i=1 ; $i <= $nbm; $i++) { printf FOUT "%-4.4s","M$i"; } printf FOUT "\n"; #while ( eq '*')) # {;} } #------------------------------------------------------------------------------ # # GETLINE0 # #------------------------------------------------------------------------------ sub Getline0 { local ($fichier) = @_; if ($getline_ok = (($_ = <$fichier>) ne '')) { chop; # strip record separator } #end if $_; } #end sub Getline0