トップページ⇒php
1001コメント374KB

Perlコーディング初心者質問スレ Part 54

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/02/10(土) 19:21:23ID:???
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc10.2ch.net/test/read.cgi/php/1164519503/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0067nobodyさん2007/02/16(金) 01:41:11ID:???
>>64
その結果を見ただけで意識しなくてもいいと判断する事は出来ないが、
正しいUTF-8ではそのような問題や、EUC-JPで良く発生するような
ずれてマッチする問題は起こらないことが保証されている。
参考資料: RFC2279(obsoleteだがUCS-4の範囲を全て表現できるため), RFC3629

というのもUTF-8というエンコーディングは面白い構造をしている。
まずASCIIの範囲はそのままASCIIのために割り当てられていて、
マルチオクテット文字には出現しない。これはEUC-JPと同じ。
で、問題のマルチオクテット文字の表現なのだけれど、
nオクテットで表現されるUTF-8文字は、最上位ビットから
nビット1が連続した後に0が来るようになっている。
全ての非ASCIIのUTF-8文字は2byte以上で表現されるので、
これは1オクテット目が10xxxxxxにならないということ。
そして、2オクテット目以降は上位2ビットが必ず10になっている。

これらによって、マルチオクテット文字中にASCII文字が登場したり、
他のUTF-8文字にずれてマッチするようなことがないことが保証できるわけだ。

さて、ここまではUTF-8に対する一般的な話だが、実はPerl(5.8以降、5.6は怪しい)は
UTF-8を内部エンコーディングとして正式にサポートしている。
文字列にはUTF-8フラグというものが用意されており、
マルチオクテット文字を1文字として扱うことが出来るようになっている。
この辺の話はテンプレ>>3の[Perl5.8Unicodeメモ]にあるサイトが詳しいので、
必要ならとりあえずそっちを読んでくれ。
0068nobodyさん2007/02/16(金) 01:53:09ID:???
>>67
まるごとPerlの記事もおすすめ
0069nobodyさん2007/02/16(金) 01:55:50ID:???
間違えた>>64
0070nobodyさん2007/02/16(金) 06:38:18ID:MoploLOU
>>66
数倍ならば高速化できますが、100倍はムリだとおもいます。

処理内容は以下に記載。
 1)CSVを1行を読み込み。
 2)対応するWEBページのURLを作成。
 3)上記URLをもとにWEBページをダウンロード。
 4)ダウンロードした情報をCSVに付加。

 処理時間は 1行あたり凡そ1秒。

既にダウンロードした情報はDBにキャッシュしていますが、
情報量の関係で
「新規にWEBページをダウンロードしなければならない」場合が
発生するのです。
0071nobodyさん2007/02/16(金) 09:57:57ID:???
プログレスバー表示はクライアントサイドの話だから、板違いかな。
例えば、AjaxとかCommetとかFlashで何秒おきかに進捗状態を取得して表示するとか。
かなり面倒なことは確か。
0072nobodyさん2007/02/16(金) 10:28:08ID:???
子プロセス?
0073nobodyさん2007/02/16(金) 14:30:20ID:???
フラグ立てちゃうとエラーが…
0074642007/02/16(金) 19:29:33ID:???
>>67-68
丁寧な説明ありがとうございました。
>その結果を見ただけで意識しなくてもいいと判断する事は出来ないが、
その通りですね、すみません・・・
0075652007/02/16(金) 23:38:29ID:MoploLOU
>>71
どうもです。
やはり ajax ですか・・・、調べてみます。
0076nobodyさん2007/02/17(土) 01:22:16ID:???
>>75
使ったことないけど、シンプルな進捗表示でいいなら
multipart/x-mixed-replace でさくっとできそうな気がする
0077762007/02/17(土) 01:32:05ID:???
なんかIEで使えないとか書いてあったな…。
やったことある方法では「<script> statusbox.value = "現在5件処理完了"; </script>」
的な1行javascriptをautoflushでprint。
0078nobodyさん2007/02/17(土) 17:26:59ID:???
>>70
そんな事、CGIでやるべきではないと気付け。
0079nobodyさん2007/02/17(土) 20:47:43ID:???
ファイルの中身を配列に入れたいんですけど、
my @file = <FILE>;
これより効率の良い方法ありますか。
ファイルの中身は最大で100KBです。
共有鯖なので心配で使えません。
0080nobodyさん2007/02/17(土) 21:23:25ID:???
は?
0081nobodyさん2007/02/17(土) 21:33:47ID:???
>>79
最終的に何がしたいのか、および何の効率かによる。

メモリ効率を気にしていて、「ファイルの中身を」丸ごと「配列に入れたい」のなら、
その方法だとデータサイズの2倍程度メモリを消費して、
1行ずつpushで代入する方法だとデータサイズと同じ程度だったが。
(perl5.8.7 on FreeBSD5.4調べ)

本当にやりたい事を考えずに配列に代入する効率だけ考えるのは本末転倒というものだ。
0082nobodyさん2007/02/17(土) 21:44:02ID:???
readして改行コードでsplit
0083nobodyさん2007/02/17(土) 21:55:29ID:???
>>81
(ファイルのフォーマットは先頭が数字で固定)
my @log = <FILE>;
my($start,$end) = hoge(); #ユーザーの入力による数字
my $new = ( $log[$#log] =~ /^\d+/s ) ? $& : 0;
my $old = ( $log[0] =~ /^\d+/s ) ? $& : 0;
$start = $old if( $old > $start );
$start = $new if( $start > $new );
$end = $old if( $old > $end );
$end = $ned if( $end > $new );
$end = $start if( $start > $end );
my @choice = print_request_lines(\@log,$start,$end);
sub print_request_lines {
  my($log,$start,$end) = @_;
  my $count = $start;
  $end = $count unless($end);
  foreach ( @$log ) {
    if ( /^\Q$count\E/s ) {
      print;
      if ( $count >= $end ) {
        last;
      }
      else {
        $count++;
      }
    }
  }
}
あとあとはこんな処理です。長いので一応簡潔にまとめたつもりです。
read(FILE,my $hoge,-s FILE);とか?
気になるのは鯖の負荷です。一日2万弱アクセスあります。
0084812007/02/17(土) 22:00:24ID:???
... $ned if....
my @choice = ...
あたりはまとめミスですorz
0085nobodyさん2007/02/17(土) 22:02:22ID:???
そして名前ミス('A`)
83でした。すみません
0086nobodyさん2007/02/17(土) 22:28:50ID:???
>>83
指定される範囲は通常データ全体に比べて非常に小さいものかな?

番号がソートされて並んでいるなら二分探索が有効。O(log n)に出来る。
行頭探すのがちょっと面倒だがなー。データ構造を変えることが可能ならば、
あらかじめ番号に対してオフセットを記録しておくような簡単なindex付けを行っておくのが吉。
0087nobodyさん2007/02/17(土) 23:07:21ID:???
>>86
指定される範囲は予想ではデータ量の2割りくらいがメインです。
10割りの時もありますが。

二分探索を調べて見ましたが使いまわしできなくなりそうなのでやめました。

結局ファイルを小刻みに分割することにしました。
index付けとは言えませんが、
先に位置情報ファイルを読み込んで該当ファイルを探すといった感じです。

>>81 >>86 大変勉強になりました。ありがとうございました。
0088nobodyさん2007/02/18(日) 04:57:02ID:???
>>83
行頭についてる整数値を取得すれば1行読みの1パスで行けるんじゃない?

>if ( /^\Q$count\E/s ) {
の行、$count=10のとき行頭が"100"でもマッチするね
データ構造上無いのかも知れないけど

ちなみに小分けしたファイルのどれから読み込むのかを
要求された値から機械的に算出できるようにするという工夫もあるよ
0089nobodyさん2007/02/18(日) 09:12:59ID:???
>>83
>1行読みの1パス
ファイルが100KBを超えるたびに先頭の1行を削除していたので
$new,$oldをどうやって取得するかが問題でした。

>if ( /^\Q$count\E/s ) {
if ( ^\Q$count\t\E/s )にしました。

>機械的に算出
(ファイルを100件刻みで小分け)
my $file = './log/*.dat';
my $fle_numbe = int($start / 100) + 1; #+1は必ずtrueにする為
$file =~ /\*/$file_number/e;

とりあえずこんな感じにしました。
ファイルをまたぐ方法を考え中です。
なんとなくpipeを勉強(`・ω・´)
0090652007/02/18(日) 17:02:29ID:qiEEvOwU
>>78
>そんな事、CGIでやるべきではないと気付け。

 CSV処理サービスを多数に公開する趣旨にもとづき、CGIで試作しています。
 CGI以外で、多数のユーザーに処理サービスを公開する方法がありましたならば、
 ご教授願います。
0091nobodyさん2007/02/18(日) 17:24:45ID:???
CGIでも場合によってはアリだと思うよ。

簡単な方法としては、
(1) HTTP response header を返す。
(2) HTTP body の先頭を返す。
ここで総処理件数を表示しても良い。
(3) 時間の掛かる処理を開始する。
(4) 1件処理毎に何らかのデータを返す。
(プログレスバーのような格好の良い物の代替として)
(5) できあがったCSVをダウンロードするためのリンクを出力。

つまり、プログレスバーの代わりに、(4) で何らかのデータを
返すだけだけどね。
垂れ流し的に「n件目、処理中」ってのが同じページに繰り返し
出ちゃったり、ちょっとかっこわるいけど。
0092nobodyさん2007/02/18(日) 17:34:02ID:???
もうちょっと手の込んだ方法。

時間の掛かる処理を開始する前に

<meta http-equiv="Refresh" content="10;URL=hoge.cgi?jobid=123">

みたいなページを返して、定期的に hoge.cgi を呼び出させる。
上記のページをクライアント側へ返したらSTDOUTとSTDERRはcloseする。

hoge.cgi は与えられたパラメータ(例示のjobid=123みたいな)でどの処理か
特定し、処理途中なら進捗具合を返す、の繰り返し。

処理完了なら、CSVダウンロードのためのリンクを返す。

で、どうだろ。
0093nobodyさん2007/02/18(日) 17:58:06ID:???
ローディングとかのアニメGIFでも表示させてろよ
十分だろ
0094nobodyさん2007/02/18(日) 18:05:14ID:???
>>93
割り切って人間に対してはそれでも良いかもね。

しかしHTTP通信上、一定時間データが流れないと、ブラウザ側が
エラーと見なしてしまうことがあるからね。
0095652007/02/18(日) 20:30:00ID:qiEEvOwU
>>91, >>92
CGI の神のご教授、感謝です。
いままでは local 環境でのプログラミング( kernel層)ばかりだったので、
CGI は可也勝手が違います。
0096nobodyさん2007/02/19(月) 05:29:32ID:???
初心者の浅知恵でしかないんだけど、処理中に一定数ループしたら、
ちょっとだけファイル書き出しておけばよさそうに感じるけど、そういう感じって出来ないのかね。
処理してるのと別の工程でそのファイル読み出して進展状況とするみたいな感じで。
0097nobodyさん2007/02/19(月) 07:55:57ID:vpFQD8kw
>>96
できるよ。一度ユーザに画面遷移してもらうという点では>>92と同じ考え方。
実装では>>92もファイルを書き出すことになるだろうけど。
0098nobodyさん2007/02/20(火) 02:04:21ID:???
話の流れをぶったぎってすいませんが質問です。
use CGI;
$q = new CGI;

foreach($q->param){
といった形のソースで、POSTされたデータをハッシュで受けたいのですが、keyにあたる部分にHTMLでいうところのID要素を与えたいと思います。
ループ内でVALUEは$_で受け取れますが、ID要素に当たる部分を取得する方法はありませんか?
0099nobodyさん2007/02/20(火) 08:31:07ID:???
>>98
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI.pod
「スクリプトの渡された全てのパラメータの名前の取り出し」から
「パラメータリストのハッシュでの取り出し」まで読もうな。
0100nobodyさん2007/02/20(火) 10:28:24ID:???
>>98
不可能。ID属性に関する情報はブラウザから飛んでこない。
0101nobodyさん2007/02/20(火) 10:36:15ID:???
nameとvalueは飛んでくる
0102nobodyさん2007/02/20(火) 11:28:45ID:6AwpaKJs
Perl v5.8.7 を WindowsXP 上で使っています。
Apache のアクセスログで、Mozillaが含まれる行だけを削除して他のファイルに出力しようとしています。
以下のようにやったのですが、

syntax error at access_log.pl line 13, near ")
print"
access_log.pl had compilation errors.

と言われてしまいます。どこがいけないのか教えていただけますか?
以下ソース。

#!C:/Perl/bin/perl

$in = 'access_log';
$out = 'access_log_out';

open(IN, $in) or die "$!";
open(OUT, ">$out") or die "$!";

while (<IN>)
{
chomp($_);
if ($_ !~ /Mozilla/i)
print(OUT "$_\n");
}

close(IN);
close(OUT);
0103nobodyさん2007/02/20(火) 11:32:45ID:???
13行目がエラーって書いてあるだろ?
よく見るんだ!!
0104nobodyさん2007/02/20(火) 11:36:24ID:???
>>101
それが何か?

>>102 入れ替える。
print(OUT "$_\n")
if ($_ !~ /Mozilla/i);
01051022007/02/20(火) 11:38:33ID:???
該当部分を
if ($_ !~ /Mozilla/) {
print(OUT "$_\n");
}
と括弧つけたらコンパイル通りました・・・
式が一文だから括弧つけなくてもいいと思ってたのに、
ダメなんでしたっけ?
01061012007/02/20(火) 11:42:09ID:???
>>104
>>100への補足だよ・・・なんでそんな言い方するん?
0107nobodyさん2007/02/20(火) 11:48:20ID:???
>>105
C や Java ならおkなんだけど、Perl では後置にしない限り if にはブロックが必要。
0108nobodyさん2007/02/20(火) 11:50:45ID:???
>>105
Perlでは必ず必要。Cとは違うのです。

以下perlsyn(1)の該当部分。Note that以降に注目。

The following compound statements may be used to control flow:

if (EXPR) BLOCK
if (EXPR) BLOCK else BLOCK
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
LABEL while (EXPR) BLOCK
LABEL while (EXPR) BLOCK continue BLOCK
LABEL until (EXPR) BLOCK
LABEL until (EXPR) BLOCK continue BLOCK
LABEL for (EXPR; EXPR; EXPR) BLOCK
LABEL foreach VAR (LIST) BLOCK
LABEL foreach VAR (LIST) BLOCK continue BLOCK
LABEL BLOCK continue BLOCK

Note that, unlike C and Pascal, these are defined in terms of BLOCKs,
not statements. This means that the curly brackets are required--no
dangling statements allowed.
01091022007/02/20(火) 12:50:14ID:???
>>104
入れ違いになってしまいました。ありがとうございます。

>>107,108
なるほどそうなんですね、
Cあがりなので後置というのがすごく違和感あるのですが
頑張ります。
ありがとうございました。
0110nobodyさん2007/02/20(火) 13:03:25ID:???
>>106
当たり前の事をあえて書いているので、nameとvalueからidを生成する画期的な技でも隠しているのかと。
0111nobodyさん2007/02/20(火) 13:05:23ID:???
後置は乱用しすぎると見難いので、無理せず {} 使ったほうがいいと思うよ。

俺はほとんどイディオムと化している next if 〜ぐらいしか後置は使わないな。
いろいろ、好みもあるとは思うがね。
0112nobodyさん2007/02/20(火) 13:05:26ID:???
逆にあらかじめnameとvalueからID生成して付けとけばいいんじゃね?
0113nobodyさん2007/02/20(火) 13:30:25ID:???
valueを予測しておく技術を開発するのか。凄いなぁ。
0114nobodyさん2007/02/20(火) 13:37:37ID:???
orと||ってどっちをよく使う?
渡しは、より順位が下という理由だけで、ほとんどorを使ってるけど。
0115nobodyさん2007/02/20(火) 13:52:16ID:???
>>113
valueが可変なのはtextかtextareaかpasswordぐらいっしょ
その他ならできるんじゃね?
っつーかあんた陰でイヤミって呼ばれてるっしょ?
0116nobodyさん2007/02/20(火) 13:56:54ID:???
>>114
漏れは必要なときだけorかな
・条件文の中では||
・式をショートサーキット評価するときも||
・文をショートサーキット評価するときはor
while ($x || $y) {
my $hoge = $fuga || parse() or die 'Parse error';
...
}
実際にこんな組み合わせて書くことはないけれどこんな感じで
0117nobodyさん2007/02/20(火) 14:12:04ID:???
俺は値を使うようなときは||で、orはほげほげ or die ... みたいに式全体の値は
どうでもよくて制御構造っぽく使うときだけ。

0118nobodyさん2007/02/20(火) 14:22:08ID:???
なるほど。
0119nobodyさん2007/02/20(火) 14:45:36ID:???
>>115
ロクな検討もしていない思いつきを垂れ流されると振り回されて迷惑。
nameとvalueが予め列挙できている事で可能になる、idの生成方法なんて考えて無いでしょ?
0120nobodyさん2007/02/21(水) 18:22:26ID:???
hoge.txtをネットで、公開してダウンロードした数を記録したいと思います。
スクリプトの記述は、cgi呼び出されたら、
・wgetで、hoge.txtを指定して実行
・カウントをひとつ足して記録
こんな感じでしょうか?

wgetでダウンロードできるでしょうか。
0121nobodyさん2007/02/21(水) 18:23:28ID:u+1RH8XX
>>120
hoge.txtがどこにあるかしらないが、同じサーバ上にあるなら普通にopen()して読み取ればいいんじゃないの?
0122nobodyさん2007/02/21(水) 21:25:39ID:???
ファイルがロック中なら
待たずに即座に終了させたい。

↓こんなサブルーチン作ったけど確認できないのでご教授ください。
sub FileLockEX {
  # use Fcntl ':flock';
  my($fh,$lockfile) = @_;
  open($fh,"> $lockfile") or die;
  if ( flock($fh,LOCK_EX|LOCK_NB) ) {
    return $fh;
  }
  else {
    die;
  }
}
0123nobodyさん2007/02/21(水) 23:08:58ID:???
確認できないもん作るな!
以上

次どうぞ
0124nobodyさん2007/02/21(水) 23:34:29ID:???
perl6 は何時できるんですか?
0125nobodyさん2007/02/21(水) 23:41:16ID:???
今、配達に出るところです。
0126nobodyさん2007/02/21(水) 23:56:26ID:???
>>122
【Perl】ファイルロック(排他処理)について語ろう
http://pc10.2ch.net/test/read.cgi/php/1024795138/
0127nobodyさん2007/02/22(木) 12:53:40ID:???
>>125
早いとこよろしくお願いします。
0128nobodyさん2007/02/22(木) 19:13:48ID:???
>>121
レス遅くなりました。
いただいたアドバイスの意味がわからなくて、
時間かかってしまいました。

print "Content-type: application\/download\n";
print "Content-disposition: filename=\"$filename\"\n\n";
open(FILE,"< $filename") || die "$filename open失敗しました";
binmode(STDOUT);
binmode(FILE);
while (<FILE>) { print; }
close(FILE);

いろんなページ見ながら、上記のようになりました。
Content-type:
は、ダウンロードするファイルの種類によって、変えるんでしょうか。
意味がわからなかったりしますが、ちょっとずつ勉強したいと思います。
ありがとうございました。
0129nobodyさん2007/02/22(木) 21:18:05ID:???
つ MIME
0130nobodyさん2007/02/23(金) 01:48:29ID:zpF2/r1p
現在
open(FILE, '>:encoding(cp932)', $fn) or die;

のようにしてUTF-8の文字を、Shift-jisに変換しています。
UTF-8には存在する文字でShift-jisに存在しない文字の場合、
エラーが発生し、UTF-8の文字コードが表示されてしまうの
ですが、Shift-jisに存在しない文字コードの場合は表示を
しないようにする(空白に変換する等)にはどのようにしたら
よいでしょうか?
0131nobodyさん2007/02/23(金) 02:49:49ID:???
>>130
perldoc Encode して
Handling Malformed Data
のあたり読んでみそ。

お好きなように選択してくださいな。
0132nobodyさん2007/02/23(金) 21:26:44ID:vPX/8GZG
$uaはLWP::UserAgentです。
$urlが存在しない場合、(http://fugahoge.zubazubaとか)
以下のコードで、(A)に対して3秒タイムアウトが効きません。
(B)には効きます。


$request = GET($url);
eval{
    local $SIG{ALRM} = sub { die "timeout\n" };
    alarm (3);
    $res= $ua->request($request);--------------(A)
# sleep 10;---------------------------(B)
    alarm 0;
    };
    alarm 0;---------(C)
    if($@) {
        if($@ =~ /timeout/) {
# タイムアウト時の処理
             #fugafuga
        } else {
# その他例外時の処理
}
   }
}

もう死にそうです。5時間ほど寝てません。
0133nobodyさん2007/02/23(金) 21:35:25ID:???
$ua->timeout(3);
0134nobodyさん2007/02/23(金) 21:40:39ID:vPX/8GZG
それはconnectしてからのタイムアウト。
存在しないマシンをさっさと検知したいのです。

ちなみに対象ホストはpingかけても無応答が20秒くらい続くようなマシンです。
0135nobodyさん2007/02/23(金) 22:08:15ID:???
Socket + select
or
LWP + fork
ttp://www.gac.jp/article/index.php?stats=question&category=12&id=16922&command=msg
0136nobodyさん2007/02/23(金) 23:24:55ID:???
名前解決に時間がかかってるのかな。
ならば、Net::DNSで自分で引く。
0137nobodyさん2007/02/24(土) 02:30:49ID:???
perlってもう終わってるんですか?PHPとかに比べて未来は無いんですか?
0138nobodyさん2007/02/24(土) 02:39:06ID:???
私も socket と select を使うのがいい気がするな。
0139nobodyさん2007/02/24(土) 15:19:31ID:8+oB65y+
整数の四則計算で"ずれ"を知る方法はありますでしょうか?

整数だけの四則計算を数万回繰り返して結果を返すというのを作っているので
すが(÷は小数点以下切捨て)、結果が変になる場合がありました。

調べてみると、途中に非常に大きな数値が一つでもあるとそこでずれるというの
までは分かったのですが、正常に計算できる限界というのはどこまでなのでしょうか?
(perl v5.8.5, kernel-2.6.9-34)
0140nobodyさん2007/02/24(土) 15:41:17ID:???
>>139
有効桁数については前スレで既出。まだ落ちてないようだから行ってらっしゃい
http://pc10.2ch.net/test/read.cgi/php/1164519503/641-681

計算方法を見直すか、根本的に解決するにはMath::BigInt
0141nobodyさん2007/02/24(土) 16:33:44ID:8+oB65y+
有難うございます。見てきました。
あと、BigInt も軽くテストしてみてokだったので、実際に組み込んで
動かしてみましたが、結構遅いのですね。計ってみましたが300倍ぐら
い遅いです。

正確さをとるか速さをとるかのトレードオフなんですね。
0142nobodyさん2007/02/24(土) 16:55:27ID:8+oB65y+
至極当然の事を言ってしまった..。
0143nobodyさん2007/02/24(土) 16:56:46ID:???
>>141
Math::BigIntはPurePerlな実装だからね…
Math::BigInt::GMPとかXSによる実装があるから、
コンパイルできるならこれらを使うとそれなりに速くなると思うけれど。
http://search.cpan.org/search?query=Mathh%3ABigInt&mode=dist
0144nobodyさん2007/02/24(土) 17:10:20ID:K7bQHZEY
よく配布されているCGI等で

open(FH,"$hoge");
@hoge=<FH>;
close(FH);
foreach $hoge (@hoge){
($Hoge,$HOge,$HOGe,$HOGE)split($hoge)
#その他処理
}

というのがあるんですが、上のを下記の記述に変更した場合、
サーバーへの負荷とかどのように変わってくるか、具体的な数字は分かりますか?

open(FH,"$hoge");
while(<FH>){
($Hoge,$HOge,$HOGe,$HOGE)split($_)
#その他処理
}
close(FH);

下の方が無駄に変数やリストを使わなくなるので軽いような気はしてるんですが、
イマイチ確信がもてないのです、実際どうなんでしょう?
0145nobodyさん2007/02/24(土) 18:11:51ID:???
処理の内容によってはマルチプロセスの際に影響はあるかも。
0146nobodyさん2007/02/24(土) 18:42:29ID:8+oB65y+
>>143
有難うございます。
すぐコンパイルが出来ず確認できないのですが、今度やってみます。
0147nobodyさん2007/02/24(土) 18:58:10ID:???
インメモリ処理かどうかの違いってことか。
0148nobodyさん2007/02/24(土) 20:14:03ID:8+oB65y+
割り切れない値であることを確認するにはどのようにすればよいのでしょうか?

45 / 20 = 2.25 (割り切れる)
45 / 21 = 2.1428.. (割り切れない)
0149nobodyさん2007/02/24(土) 20:30:33ID:???
>>148
小学生か?
こんなところに書き込んでないで学校池いけよ
0150nobodyさん2007/02/24(土) 20:39:49ID:???
>>149
わからんのなら答えるなよ
0151nobodyさん2007/02/24(土) 20:57:13ID:???
そもそも問題の定義がなってない。
割り切れるか否かは基数によって変わるわけであって、
コンピュータでの小数表現は2を基数とするのが一般的。
つまりコンピュータにとっては1/5は「割り切れない数」なわけだが、>>148はどうしたいんだろうね。

まあともかくnを基数としたときに割り切れるかは、
その分数を約分した分母がnの素因数の積で構成されているかを判定すればOK
0152nobodyさん2007/02/24(土) 20:57:37ID:???
m/nが10進の有限小数で表せるという意味だとすると、

m,nの最大公約数を求める。lとする。
n/lが2^x * 5^y(x,yは0以上の整数)という形ならOK

最大公約数の求め方はユークリッドの互除法でも調べてください。
後半は2と5でそれぞれ割り切れるだけ割っていって最後1になるか判定

という感じでいけるんじゃないか?

0153nobodyさん2007/02/24(土) 21:51:38ID:Iwese7yM
                    朝鮮中央TV
                                 ∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧∧
                    ______    < 踏んだら孕んだ!抱いたら揉んだ!
                   /:::::::::::::::::::::::::::::ヽ   < 孕んだ振る降る般若だ!
                  /::::::::::::::::::::::::::::::::::::ヽ  < ティムポ擦る無駄、フン出る春巻きはむ無理!
                  |::"´ ̄ ̄ ̄ ̄ ̄ヽ:::|  <  チン毛ちぎり、看板塗る飛騨!
                  |:::|           |:::|  <  陰毛臭いんだ!モッコリ膨らんだ!
                 ヽ/ -=.、   _,=-  ゾ  <  安打!?半田ゴテ適時打!!
                  | |  -ェゝ ";ュ-   |ヽ  <  原チャリ盗んだ!あんだとこら!?
                  ヽト、  ´i `   ,.イ/  < よくちょん切れるハサミだ!
                  〈  i  /L_、  i 〉   _ノ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨
               __,. -‐ヘ  -=三=-  /──、
          _ -‐ ''"   /  \     /\    ̄゛ー- 、
         ハ       /   |ヽ ̄ ̄//  ヽ、      ∧
         |  ヽ      く     ! .>ーく /     >      / !
           |   |     _>  ∨-、r‐/   <_     /  !
        ∧   !    ヽ     | 厂L/   ■/      i  .∧
       / \  |     \   ∨  !    /      | / ハ


01541302007/02/24(土) 23:31:04ID:WjAlsxOj
プログラムでutf-8の文字列を読み込みcp932変換する場合、cp932にない文字
は「?」に変換したいと考えてます。
この場合どのようになコーディングをしたらよいでしょうか?


せっかく131の方が答えてくれたんですが、
よくわかりませんでした。。すみません。。。
0155nobodyさん2007/02/25(日) 00:25:19ID:???
ファイルアップロードの際に
$CGI::POST_MAX = 1024*1024;とせずに
ファイルサイズを調べて1MBより大きい場合にはじくのとでは
サーバへの負担が違いますか?
あと、POST_MAXを指定してサイズがオーバーしていた場合に
処理が取り消されたという情報はどこかに入るのでしょうか?
01561552007/02/25(日) 00:29:49ID:???
ごめんなさい。ぐぐったら出てきました。
最初にやってみるべきでした。
スレよごし、すいません。
0157nobodyさん2007/02/25(日) 05:58:13ID:???
ム板ってどのスレにも必ず>>151みたいな奴がいる
0158nobodyさん2007/02/25(日) 06:47:46ID:???
>>157
つ【同一人物】
0159nobodyさん2007/02/25(日) 07:00:21ID:???
初心者スレなのに「剰余演算子」くらいのヒントも書いてやらないのか…
$hoge = 11 ;
$foo = 3 ;
if ( $hoge % $foo == 0 ){
}
0160nobodyさん2007/02/25(日) 07:31:31ID:???
別にいいじゃん。
結局質問には一応だけど答えてるツンデレなんだし。
0161nobodyさん2007/02/25(日) 08:41:45ID:???
そんな低級な話はしてないだろ
>>148をもう一回よく読んでみ
45 % 20 は0じゃないが割り切れると判断するんだぞ
0162nobodyさん2007/02/25(日) 09:25:01ID:???
割り切れないたびに10倍して割り切れるか確認するのか?
0163nobodyさん2007/02/25(日) 09:26:01ID:???
分母を1億倍位にして剰余を見る
0164nobodyさん2007/02/25(日) 09:38:58ID:???
算数大丈夫ですか?
01651482007/02/25(日) 10:16:04ID:k71AVSTb
いろいろ有難うございます。
>>149,159,160
% で解決できるなら助かるのですが(>_<)
質問は理解し易く『 45 / 20 = 2.25 』と書いたつもりだったのですが、
難しかったようで、失礼しました。

>>152
有難うございます。
難しい・・・。もうちょっと勉強します。

>>162,163
有難うございます。10倍しても、1億倍してもどこで諦める瞬間を作らないと
いけないですよね。もしかしたら1億1倍のところで割り切れるかもしれない。

>>161 thank you...
0166nobodyさん2007/02/25(日) 12:45:49ID:???
>>165
> もしかしたら1億1倍のところで割り切れるかもしれない。
( ゚д゚)ポカーン
■ このスレッドは過去ログ倉庫に格納されています