>>940 http://bioperl.org/ bioperlのBio::Tools::Blast, StandAloneBlast辺りのモジュールを使って
BLAST, FASTA辺りの吐くサーチ結果をパースするのが一番簡単&&高速だと思うな。
$in = new Bio::Seq(-id=>"test query", -seq=>"GAAG");
$blast_report = $factory->blastall($in);
詳しくは付属のドキュメント参照ね。
_gunzipタン久しぶり〜
デザインが似てるとパクリになるんですか?
955 :
8484:02/02/23 11:59 ID:gBGRhxGb
おにぎりワッショイ!!
\\ おにぎりワッショイ!! //
+ + \\ おにぎりワッショイ!!/+
+
. + /■\ /■\ /■\ +
( ´∀`∩(´∀`∩)( ´ー`)
+ (( (つ ノ(つ 丿(つ つ )) +
ヽ ( ノ ( ノ ) ) )
(_)し' し(_) (_)_)
http://www.puchiwara.com/hacking/ 韓国版ってでるらしいけど、どんな内容になるんだ?
この手のものが韓国に翻訳されるなんて初めてでは?
956 :
名無しさん@お腹いっぱい。:02/02/24 00:15 ID:5vPUCqZK
日付から(2002/2/24)から、1970からのシリアル秒?を計算したいんすけど、
だれか知りませんか?
>>956 ルーチンくまなきゃだめです。
シリウス歴か何かで検索。
958 :
956:02/02/24 00:28 ID:5vPUCqZK
>>957 ルーチン組むって、
1970から、指定年数まで、閏年のチェックするって感じになります?
なんか、もっとスマートな方法あるかとなぁ〜と思って探してたんですけど、
どでしょ
>>956 use Time::Local;
$time = timelocal($sec,$min,$hour,$mday,$mon,$year);
>960
モジュールのコード使えば?
962 :
名無しさん@お腹いっぱい。:02/02/24 02:15 ID:1IBSQesy
>>960 time::localは標準モジュールだよ?
965 :
956:02/02/24 03:57 ID:5vPUCqZK
とりあえずこんなふうで、作ってみたけど、
ループに2個あんのが、どうもなぁ〜
こんなんしか無いかね?
sub date2Time
{
local ( $year , $mon , $day , $hour , $min , $sec ) = @_ ;
$days = $day - 1 ;
foreach ( 0 .. $mon - 2 )
{
$days += (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[ $_ ] ;
}
foreach ( 1970 .. $year - 1 )
{
if ( ( $_ % 4 == 0 && $_ % 100 != 0 ) || $_ % 400 == 0 )
{
$days += 366 ;
}
else
{
$days += 365 ;
}
}
$seconds = $days * 86400 ;
$seconds += $hour * 3600 ;
$seconds += $min * 60 ;
$seconds += $sec ;
$seconds -= 32400 ;
return $seconds ;
}
966 :
---:02/02/24 04:37 ID:???
> 965 チョットこんぱくとにするとこんな感じかナー。
sub date2Time{
local( $year, $mon, $day, $hour, $min, $sec )= @_ ;
$days= $day - 1 ;
for ( 0 .. $mon - 2 ){
$days += (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$[+ $_] ;
}
for ( 1970 .. $year - 1 ){
$days+= (( $_ % 4 == 0 && $_ % 100 != 0 ) || $_ % 400 == 0) ? 366 : 365;
}
$seconds = $days* 86400;
$seconds+= $hour* 3600;
$seconds+= $min * 60;
$seconds+= $sec;
$seconds-= 32400;
$seconds;
}
>>965-966 おしぃ〜。あとちょっと。$yearがうるう年だったとき、ちょびっとずれるみたい。
use POSIX;
srand();
foreach(1..100) {
$y = 1970 + int(rand(40));
$m = int(rand(12)) +1;
$d = 1;
$t = POSIX::mktime(0, 0, 0, $d, $m-1, $y-1900);
$t2 = date2Time($y, $m, $d, 0, 0, 0);
printf("%4s/%2s/%2s : $t %s= $t2\n",$y,$m,$d, $t==$t2 ? "=" : "!");
}
968 :
名無しさん@お腹いっぱい。:02/02/24 17:04 ID:KO+bj0za
正規表現で、質問があります。
<select name="hoge">
<option>
<option>
</select>
<select name="hoge">
</select>
にヒットする表現を知っている方がいましたらよろしくお願いします。
>>968 格納されてるのは1変数?リスト?それによる。
レスありがとうございます!
具体的には
HTML文を$bodyという変数に読み込んで、
<select name="hoge">
<option value="fuga">商品名1
<option value="fuga1">商品名2
</select>
で二つに切ろうとしているんですが、
($top,$bottom) = split '<select(.|\n)*</select>',$body;
とやってもうまくいきません。
$bodyに格納されているのはただのHTML文です。
よろしくお願いします。
そもそも正規表現形式ではない。
他人の正規表現って解析面倒だから・・・。
/'<select.*?<\/select>'/
とか。
ありがとうございます。
試してみました。
でもやっぱり$bottomの方に何も格納されません。
$topの方には<select が出てくる直前までの文が格納されるんですが・・
>そもそも正規表現・・
囲む記号は何でもいいらしいというのを本で読んだので、エスケープ
するのが面倒なんで、''でくくっていました。でも普通使わなさそうなので
素直に//でくくります。
もっと、試行錯誤してみます。アドバイスがありましたらよろしくお願いし
ます。
自己解決しました。
/<select.*<\/select>/s,$body,2;
とやれば出来ました。
(.|\n)使っていたのがおかしくなる元だったのかな?
ひまになったら考えてみます。
ありがとうございました。
974 :
名無しさん@お腹いっぱい。:02/02/24 18:44 ID:oPNaAPLP
質問です。
Perlで書いたプログラムが遅いと言われた場合、
PHPに移植すれば高速化できるものなのでしょうか?
当然処理の内容によります。
劇的な速度の変化など期待するだけ無駄です。
>>973 > 囲む記号は何でもいい
区切り文字に//以外を使用するなら、m演算子が要る。
即ち、//が区切り文字の時のみm演算子省略可能。
>>973 ?外すと最大マッチするから気をつけてね。
質問です.
バイナリとして読み込んだテキストファイルを処理して出来た文字列があります.
この文字列の末尾の改行を取り去りたい場合,
s/\x0D?\x0A?$// とする以外無いのでしょうか.
chompはどうも\x0Aしか消してくれないみたいなので,
改行コードが\x0D\x0Aだった場合は\x0Aのみが消されて\x0Dが残ってしまいます.
s/\x0D?\x0A?$// より良い方法があればご教示ください.
OSはWindows2000,PerlはActivePerlとPerl for Cygwinを使っています.
$_ = "str\x0D\x0A\x0D\x0A";
open(OUT_BIN, "> ./out_bin.txt") or die;
binmode(OUT_BIN);
chomp;
print OUT_BIN;
close(OUT_BIN);
>978
binmodeをコメントアウトしたらうまくいかない?
>>978 substr($data,length($data)-2,2):
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 次スレ立てて!! .|
|_________|
∧∧ ||
( ゚д゚)||
/ づΦ
982 :
978:02/02/24 21:32 ID:???
即レスどもです.
>>979 混乱させてしまったようで申し訳ありません.
テキストとして出力すると出力時に\x0A→\x0D\x0Aの変換がされてしまうので,
結果がわかりやすいようにサンプルコードではbinmodeしておきました.
実際にやりたい事を書いておきます.大崎氏の
「ファイルの最後の数行だけ表示する(
http://www.din.or.jp/~ohzaki/perl.htm#File_Tail)」
を改造して「ファイルの最後の数行を『逆順に取り出す』」スクリプトを作っているのです.
取り出すところまでは書けたのですが,取り出した行の改行コードがchompでは取れない.
そこで質問したというわけです.
>>980 どもです.しかし一応改行が\x0D\x0Aでない場合(\x0Aとか)も考えておきたいのです.
>>978 DOS改行が入力される可能性がある場合は、
>>978の通りにやってます。
s/\r?\n$//;
こんなかんじー。
1 0 0 0 ま で 平 然 と 質 疑 応 答 が 繰 り 返 さ れ る ス レ を 目 指 そ う ょ
>985
お気に入りに入れて移動しマスです。。。。
987 :
978:02/02/24 22:29 ID:???
>>983 ありがとうございます.一応支障は無いので私もこのままいく事にします.
答えてくれたみなさん,どーもです.
>>985 乙カレー.
988 :
978:02/02/25 00:31 ID:???
うわ,つーかPerlメモの「改行コードを削除する」にしっかり書いてあった…….
お騒がせしてすまんかった.抜けてるなー,おれ.
989 :
名無しさん@お腹いっぱい。:02/02/25 12:34 ID:xTyCNQEK
つかぬことをお伺いします。
既にログに記録されている数桁の文字列を、
出力時にカンマやピリオドで区切ることは可能なのでしょうか?
例えば
"19800"とログに記録されているものを19,800として出力、
或いは
"20020224"とログ記録されているものを2002.02.24として出力、
いかがでしょうか、
もし可能でしたら方法を教えてもらえると大変助かります。
991 :
名無しさん@お腹いっぱい。:02/02/25 13:07 ID:ZVFFw9ik
1 while ($str =~ s/^(\d+)(\d{3})/$1,$2/);
で、数字にコンマをつけます
992 :
989:02/02/25 16:29 ID:xTyCNQEK
ありがとうございます。>990さん、991さん
望んでいたとおりの完璧に動きを得ることができました!
993 :
出来の悪い子:02/02/25 17:11 ID:KjItHBP9
出来の良いお前らに質問です
cgiにプルダウンでパラメータを渡そうとしています
XXX.cgi?year=2002&month=02&day=25
という形にはなったのですが
cgi側が吐き出す結果$Todayは -- という形になります
$day = $in{"day"};
$month = $in{"month"};
$year = $in{"year"};
$Today = $year . "-" . $month . "-" . $day;
print $Today
どこらへんの記述を見直せば良いでしょうか?
ヒントよろしくお願い致します。
>993
このへんかな?
>出来の良いお前らに質問です
>993
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$in{$key} = $value;
}
この辺。
肝心な部分が載ってねーじゃねーか。
だから出来が悪いって言われるんだ。
改善を要求しる!
ふが
ほんとにできがいいなー
。。。。。
あ
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 1000
∧ ∧ |/\_________
(,,゚Д゚)____.
(つ/~ ※ ※ \
/※ ※ ※ ※ \
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。