- 締切済み
FASTAファイルをperlでフォーマット
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- rafysta
- ベストアンサー率45% (24/53)
・chompとchopが重複。 ・DNA配列を出力する行がない。(printの位置がおかしい) ・IDを出力する時に前に改行を入れないと、つながってしまう。 例えば、 while (<STDIN>){ if(/^>/){ print "\n"; print; }else{ chop; print; } };
関連するQ&A
- perlのdo-while文で抜け出せない
perlのwhile,do-while,last文に関する質問です。 1) code1のようなプログラムを作ったのですが eでdo_whileを抜け出すことができませんがなぜでしょうか。 ---code1(eで抜け出せない)(NG)--- my $sum=0; do{ my $a=<STDIN>; chomp($a); $sum=$sum+$a; }while($a ne 'e'); print $sum; -------------------------------- 2) 抜け出す方法をいろいろ試していたら while(1)にしてlastで抜けるようにすると code2ではeで抜け出すことができるように なりましたが、 do~while(1)にしたcode3では、 「Can't "last" outside a loop block at …」C というエラーが発生します。 code2とcode3はwhileがdo~whileになって 条件を見る位置がループの始めか終わりの 違いだけなのに、なぜ、code2ではOKで、 code3ではエラーになるのでしょうか。 ---code2(eで抜け出せる)(OK)----- my $sum=0; while(1) { my $a=<STDIN>; chomp($a); last if ($a eq 'e'); $sum=$sum+$a; }; print $sum; --------------------------------- ---code3(エラーになる)(NG)----- my $sum=0; do{ my $a=<STDIN>; chomp($a); last if ($a eq 'e'); $sum=$sum+$a; }while(1); print $sum; --------------------------------- よろしくお願いします。 Windows7 , ActivePerl(v5.16.3)
- ベストアンサー
- Perl
- 数値に関しての質問です。
$value = <STDIN>; chomp($value); if ($value >= 5) { print "5以上の数です。"; } else { print "5よりも小さい数です。"; } 上のperlを実行した時に、4.999999999999999 9が15個並んだときは、5よりも小 さいのですが、16個以上の時は5以上になってしまいます。 これってどういうことですか。 教えてください。
- 締切済み
- Perl
- perlの制御文について
汚くて申し訳ありません。 以下のようなperlのプログラムを組んだのですが制御文が思い通りに動きません。 比較対象の数字の先頭の0を取れば正常に動くのですがどうしても0をはずすことはできないのです。 いろいろ試してみたのですがどうしてもうまきかないので知恵を貸してください。 $input = <STDIN>; if($input > 0130){ print "A\n"; } elsif(($input > 0120)&&($input < 0130)){ print "B\n"; } else{ print "C\n"; }
- 締切済み
- Perl
- perl で効率の良い素因数分解の方法
以下は、N を素因数分解し、それにかかる時間を表示するプログラムです。 #!/usr/bin/perl -w use Benchmark; print("N=?"); chomp($n=<STDIN>); $start_time=new Benchmark; $i=2; while($i <= $n){ if($n%$i==0){ print("$i、"); $n = $n/$i; }else {$i++; } } $end_time=new Benchmark; $time=timediff($end_time,$start_time); print("このプログラムの実行時間は".timestr($time)."秒です。\n"); 確かに、このプログラムを用いれば、入力した数字を素因数分解し、それにかかった時間を表示させることができます。 しかしこの方法では、数字が大きくなると計算に時間がかかってしまい、効率がかなり悪くなってしまいます。 ヒントだけでも良いので、どなたかもっと効率の良い方法を教えていただけませんか。 よろしくお願い致します。
- 締切済み
- 数学・算数
- ファイルの入出力と改行
縦100文字横70文字のデータが入ったデータファイルを横50文字にして並べ直したいと思い、まず試しに標準出力でそれがうまくいくかやってみたのですが、うまくいきません。もしお分かりであれば教えていください。よろしくお願いいたします。 #! /usr/bin/perl $filename = "reference.txt"; open HANDLE, "<$filename" or die "cannot open :$!"; print "open success\n"; @array = <HANDLE>; $count = 1; foreach $var (@array) { chomp $var; # print $var; if($count==50){ print $var, "\n"; } else{ print $var; } $count++; } close HANDLE; print "\n";
- ベストアンサー
- Perl
- STDINがうまく動きません。
次のようなスクリプトを書いて、Windows上でDOSプロンプトから scr.pl < aho.txt と実行しましたが何も出力されません。 エラーメッセージなども表示されません。 STDINのpipeが動いていないと思われるのですが、何か書き方に 問題があるのでしょうか? 教えてください。 よろしくお願いします。 #!/usr/bin/perl-w while (<STDIN>) { chomp; print $_; }
- ベストアンサー
- Perl
- until文
初歩的な質問ですみません。 file1 あいうえお かきくけこ さしすせそ たちつてと ・ ・ ・ ・ なにぬねの はひふへほ まみむめも があります。 ・・・・の部分を消したくて、以下のようなプログラムを書いたのですが、 上手くいきません。 教えてください。お願いします。 @ARGV = ("file1"); $^I = ".bak"; while(<>){ $a = 0; chomp($_); if(/たちつてと/){ $a = 1; until(/なにぬねの/){ $a = 1; } }; if(/なにぬねの/){ $a = 0; }; if($a = 1){ }else{ print "$_\n"; }; };
- ベストアンサー
- Perl
- perlで以下の記述の意味についてご助言願いたく。
while( <$_old> ){ if( $_ =~ /^$var\:(?!\*RK\*)/ ){ print "A\n"; }else{ print "B\n"; } } 上記の上から2行目の if( $_ =~ /^$var\:(?!\*RK\*)/ ){ において、 ()の中の先頭に ?! とあるのですが、 これはどういう解釈なのでしょうか? ご助言ご鞭撻の程宜しくお願い致します。
- ベストアンサー
- Perl
- perlのwhile,連想配列についてです。
perlの連想配列を使い "AP" => "Apple" "BN" => "Banana" "OG" => "Orange" という値を格納します。 そしてこの格納した値をキーボードからの入力で取り出します。 このように表示したいです↓↓ "好きな果物を入力してください[AP/BN/OG]" そして入力を受けるとその果物の値を返し果物の名前を表示します↓↓ "あなたの好きな果物はAppleですね" ここまではできたのですが、この格納した果物以外を入力するとwhileで格納した果物が入力されるまで"3種類から選んでください”というようにループしたいです。 この場合どのように書けばよいのでしょうか。 whileの場合andで書きたい場合はどのように書けばよいのでしょうか。 また入力には<STDIN>を使い引数はchmopで処理すると良いとアドバイスを貰いましたがchompの使い道がよくわかりません。 そちらも説明していただけると幸いです。 わかりにくい質問ですがよろしくお願いします。
- ベストアンサー
- Perl
お礼
参考になりました。 ありがとうございます。