Perlコーディング初心者質問スレ Part 50
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0951nobodyさん
2006/07/25(火) 12:13:12ID:???0952nobodyさん
2006/07/25(火) 12:17:22ID:???あとは時間チェックとスリープ組み込んだ無限fork
絶対怒られるけど。
0954nobodyさん
2006/07/25(火) 13:25:59ID:???qmHandle って最新Ver1.2.0でDecember 10, 2003なんだけど、
今だったらもっといいスクリプトとかあるかな?教えてエロイひと
0955nobodyさん
2006/07/25(火) 13:55:36ID:???ィ`w
@list って配列他に使わないのであれば、<FH> するより一気に read した方がいいよ、ってことかな。
0956nobodyさん
2006/07/25(火) 13:59:10ID:???0958nobodyさん
2006/07/25(火) 14:53:00ID:???open FH, 'example.data';
my @list = <FH>
foreach( @list ){
処理
}
より
open FH, 'example.data';
while( <FH> ){
処理
}
のほうが一般に高速、メモリの使用量も少ない。
前者はファイルに保存してある情報を全てメモリ上にぶちまけた上でその情報を使って処理するのに対して、
後者はそのときの処理に必要な部分のみをファイルからメモリに読み取って処理を行う。
ディスクアクセスのキャッシングは OS がシステム全体の状況に応じて行ってくれるので
間欠アクセスによるシークロスは気にする必要は無い。
0959nobodyさん
2006/07/25(火) 14:57:44ID:???use encoding qw(euc-jp);
use Encode qw(from_to encode decode);
my $str = "%C6%FC%CB%DC";
$str =~ tr/+/ /;
$str = encode("utf8", $str); # utfフラグを落とす
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
from_to($str, "euc-jp", "utf8"); # 変換
$str = decode("utf8", $str); # utfフラグを付ける
print $str;
でだめなん?
0960nobodyさん
2006/07/25(火) 16:17:48ID:p7nXlRS6問題なくアップできるのですが、100M近いものになると
「ページを表示できません。検索中のページは現在、利用できません。
Web サイトに技術的な問題が発生しているか、ブラウザの設定を調整
する必要があります。」
のエラーが発生してしまいます。
CGIでのファイル制限は設けていないのですがこのような症状になって
しまいます。どなたかご存知の方ご教授お願い致します。
0961nobodyさん
2006/07/25(火) 16:28:28ID:???0962nobodyさん
2006/07/25(火) 16:42:24ID:???timeoutはアップの途中でも起こることなのでしょうか?
もしそうだとしたらtimeoutを防ぐ(ごまかす?)手段などはありますか?
0963nobodyさん
2006/07/25(火) 16:50:00ID:???0964nobodyさん
2006/07/25(火) 17:04:06ID:???申し訳ありません。下記がログに残されているメッセージです。
CGI.pm: Server closed socket during multipart read (client aborted?).
0967nobodyさん
2006/07/25(火) 19:54:02ID:???みたいに適当な初心者が
>自分でparseしたら
ですか。
お前にCGIモジュール以上のものが書けるのかと問いたい問い詰めたい、小一時間ほど。
どうせおまえ KEMT からコピペするだけと違うんかと。
っていうか server も close も socket も during ...も中学レベルの単語じゃねぇか。
0968nobodyさん
2006/07/25(火) 20:00:23ID:???0970nobodyさん
2006/07/26(水) 10:23:21ID:???phpならphp.iniで入力サイズを増やす。
あと、perlならアップするファイルサイズの約二倍の物理メモリを。
そしてもう来るな
0972nobodyさん
2006/07/26(水) 11:37:01ID:???それはすごい perl ですね。
0973nobodyさん
2006/07/26(水) 11:37:58ID:???sub change{
my ($in) = @_;
my $sjis_str = '[\x81-\x9F\xE0-\xF7\xFA-\xFC][\x40-\x7E\x80-\xFC]|[\x00-\x7F]|[\xA1-\xDF]';
my $target = '[\xF7][\x41-\x9B\xA1-\xFA]|[\xF9][\x41-\x9B\xA1-\xED]|[\xFB][\x41-\x8d\xA1-\xD9]';
$in =~ s/\G((?:$sjis_str)*)($target)/$1.'['.unpack('H4',$2).']'/ego;
return $in;
}
sjisとtargetがかぶってしまっています。$sjis_strから$targetを除くとどう表現できますかね?
文字コードテーブルはよーわからんヽ(+∇+)ノ
0974nobodyさん
2006/07/26(水) 12:04:59ID:JkK9HWj12006723,akjhkadghjhgiower
Text::CSV_XSを使ってCSV形式で保存してます。
アクセスログなので結構膨大です。
日付別に分別したいのですが何かいい案はありますか?
ハッシュのキーに数字のみが使えたらよかったですが。無理ですし。
で、まあdateとかつけようと思ったのですが。
push @$hash{date$temp[0]},$csv->string();
みたいな。
なんかうまくいきませんね。グローバルシンボルじゃボケエラーがでますが。
もちろんmy宣言はしてるのです。問題なく。
でりふぁれんす部分がおかしいかキーの中のやり方がおかしいかですね。
0975974
2006/07/26(水) 12:13:15ID:JkK9HWj1push @{$hash{$temp[0]}},$csv->string();
で動いた。
っていうかperlってキーに数字のみも使えるのね。便利すぎ
0976nobodyさん
2006/07/26(水) 12:13:57ID:???0977nobodyさん
2006/07/26(水) 12:32:06ID:???0978974
2006/07/26(水) 13:52:08ID:JkK9HWj1あれから色々と進めてカベにぶち当たってなんとか解決して。
でもイマイチなのでよりよい記述をアドバイス願います。
ループ処理をするときに
foreach(keys %hash){}
とやると$_に入りますが、これを$dateに入れたいのです。
今は
while(my($date,)=each %hash){}
としてますが、なんか不満が残る記述方法です。
もっとスマートなやりかたはないでしょうか。
それと連続ですみませんがもう一つ。
上記のやつでさらにkeyをsortしてから取り出したいのですが、each sort %hashだとエラーになってしまいました。
カッコもつけてみたのですがだめでした。これもできればスマートに・
宜しくお願いします。
0979nobodyさん
2006/07/26(水) 14:23:02ID:???key1 => 'data1',
key2 => 'data2',
key3 => 'data3',
key5 => 'data5',
key4 => 'data4',
);
my $key;
print "Unsorted Result\n";
foreach $key ( keys %hash ){
print " $key\t$hash{$key}\n";
}
print "\n\nSorted Result\n";
foreach $key ( sort keys %hash ){
print " $key\t$hash{$key}\n";
}
0980974
2006/07/26(水) 14:28:07ID:JkK9HWj1さっき試しに
while(my($date,)=keys %hash){}
してみたら無限ループでクラッシュするかと思いましたよ。
ありがとうございました。
0981974
2006/07/26(水) 14:32:56ID:JkK9HWj1せめて処理開始から1分が経過したら自動でexit()が発動するようなことはできないんでしょうか?
そうすればループが無限してもパソコンは安心ですよね。
0982nobodyさん
2006/07/26(水) 14:55:54ID:???だからみんな危ないかなってときはループが一定回数を超えたら処理をエラーメッセージと共に
処理を中断させるんざます。
0983nobodyさん
2006/07/26(水) 15:07:27ID:???0984nobodyさん
NGNG0985nobodyさん
2006/07/26(水) 15:39:28ID:???0987974
2006/07/26(水) 16:04:23ID:JkK9HWj1ここ読んでalarmが何かを理解しようと思いましたが、どうやら他にも理解しないといけないことがあるようで。
実行中のプロセスにSIGALARMシグナルをおくられてもね・・・
どっかで受け取る処理をするのか?
そのシグナルがきたら発動するようにできるのか?
そこらへんをこのサイトも書いてくれてたら・・・・
でもこのサイト質問すると答えてくれる。最高な管理人だからこんなこと言うの恐縮だ
0988nobodyさん
NGNG0989974
2006/07/26(水) 16:16:59ID:JkK9HWj10990nobodyさん
2006/07/26(水) 17:29:19ID:???そこに受け取る処理も何も全部書いてあるんだが。
それ読んで分からなければ、perldoc -f alarm 読んでも分からんだろうな…。
基本的に同じ事が書いてあるから。
0991nobodyさん
2006/07/26(水) 20:29:14ID:???(?:$sjis_str)* のとこを (?:$sjis_str)*? にしてみてわ?
ってか >>973 の場合 \G いらないと思うんだけど。
0992nobodyさん
2006/07/27(木) 09:50:11ID:1uzwaimq中身に数字以外を含むか、数字だけでも1桁でなければ
エラー分を出力してexitするルーチンを呼びたいのですが、
上記で穴は完全にふさげてますでしょうか?
0993nobodyさん
2006/07/27(木) 10:14:26ID:???for ( $i=0; $i<0; $i++ ) {
print $i;
}
このプログラムでは、初期値を0に設定してループごとに1足していっているのですが
終了の条件が 「0未満になった場合」 となっています。
0から1づつ足していってるので、「0未満」 となるはずもなく、0からの数字が延々と表示され続けます。
↑これって本当ですか?forの条件式部分って確かifと同じでしたよね。
だから0未満であれば実行するんであって、0未満でない上記の場合は一度も実行しないはずですが。
私が間違ってますか?
0994nobodyさん
2006/07/27(木) 10:52:50ID:???大嘘。そんなこと言ってる奴は葬ってしまう事が社会正義なので晒してください。
0996nobodyさん
2006/07/27(木) 11:26:26ID:???これを値の数値が小さい順に並べ替えたいのですがsどうやればいいでしょうか。
0997nobodyさん
2006/07/27(木) 11:31:29ID:???my @row = sort{$test{$a} <=> $test{$b} }keys %test;
print @test{@row};
なんか知らないけど試してたら偶然カスリました。
ここから後は自分でいけそうです。996でした。
0998nobodyさん
2006/07/27(木) 11:43:39ID:???http://perl.misty.ne.jp/04.html#e
0999nobodyさん
2006/07/27(木) 11:52:44ID:???print $a[int rand @a];
これでそれなりに全てが平等に抽選できてますかね?
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。