【Perl】初心者コーナー Part16
■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo
02/09/15 15:11ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0604nobodyさん
02/10/03 00:07ID:???0605nobodyさん
02/10/03 00:15ID:???>$_ = sprintf '%02d', $_ for ($mon,$mday,$hour,$min,$sec);
( ´,_ゝ`) プッ ネタかよ
0606578 , 582
02/10/03 01:38ID:uOd1wswNどんな機会に使うのでしょうか??
いまいちリファレンスより速度的に早いとか
何か利点があるのでしょうか??
0607nobodyさん
02/10/03 02:17ID:???そのくらいのデータ量だったら、値を全て読み込んでから
処理しちゃっても大丈夫/楽じゃないですかね。
use constant FIRSTFILENUM => 1;
use constant LASTFILENUM => 10;
my @data; #$data[ファイル名の数字部分]->[列][行]
for (my $fileno = FIRSTFILENUM; $fileno <= LASTFILENUM ; $fileno++){
open (FILE, "Sheet$fileno\.csv") or die;
for(my $n = 0; <FILE>; $n++){
chomp;
$data[$fileno]->[$n] = [split (/,/)]
};
close (FILE) or die;
}
こんな感じで、データを一気に読み込んで、あとは適当に
ループを回して足すなり引くなりするというのはどうでしょ?
my $sum; #各ファイルの列ごとの和
for (my $col = 0;$col < 6; $col++){
for (my $fileno = 1; $fileno <= 10; $fileno++){
for(my $row = 0;$row < 8; $row++){
$sum += $data[$fileno]->[$col][$row];
}
}
print $col + 1 . ":$sum\n";
}
たとえばこんな感じで。
0608602
02/10/03 02:52ID:l9L39VMS>そのくらいのデータ量だったら、値を全て読み込んでから
よく判らないのですが、2000行400列ぐらいに集めてしまった巨大ファイルも
処理する場合、
512Mのメモリー積んでれば(OSはLinux)大丈夫でしょうか?
今までは、excelに食わせるために一旦小さいファイルに分けるなどしてましたが。
一気にできるとなるとどれくらいのファイルまでならOKなのでしょうか?
今、手元の一番大きいので、7.3Mだから大丈夫なのかな?
0609602
02/10/03 03:05ID:l9L39VMS50枚も逝かないと思うけど……。けど、こういう場合、単純計算で512Mのうち
どれくらい残しておけばいいのかな。
基本的に表立ってはあまり使わない。
普通は、ファイルハンドルを使うときと、エイリアスを作成する時くらいじゃないかな。
0611nobodyさん
02/10/03 10:16ID:HWMUanwi本 or サイト どっちでも可
0612nobodyさん
02/10/03 10:42ID:???どっちでもいいんでしょうか。時と場合で使い分けるんでしょうか。
0613nobodyさん
02/10/03 10:54ID:xHS0Gcl+シフトジスの場合に文字化けエラーに気をつければ
どっちでもいい
0614nobodyさん
02/10/03 11:16ID:Co/qm2Ti配列名の中に変数をエラーってしまいます。
#!/usr/bin/perl
$num =0;
@ary = qw(a b c d e f);
foreach (@ary) {
push (@new_ary_$num,$_);
++$num;
}
この場合、
aを@new_ary_0
bを@new_ary_1
・
・
fを@new_ary_5
に入れたいのですが、push (@new_ary_$num,$_);で
引っ掛かってしまいます。
@new_ary_${num}など、いろいろ試してみたのですが
どうにもだめでした・・。
配列名の中に変数は使えないのでしょうか?
宜しくお願いします。
0615nobodyさん
02/10/03 11:18ID:???配列名の中に変数をエラーってしまいます。
↓
配列名の中に変数を使うとエラーってしまいます。
でした。すんません
0616nobodyさん
02/10/03 11:18ID:???<form action="aaa.cgi" method="post"><input type="text" name="text" value="aiueo"></form>
-----------------
# aaa.cgi
$post_name = "text";
$post_value = $FORM{text};
print "Location: http://xxx.yyy.zzz/hoge.cgi\n\n";
---------------
こうやってhoge.cgiへ自ら用意したpostデータ(name=text value=あらかじめ用意した値)
を送り付けたいのですが可能ですか?
getの時は引数を付ければいいだけですが・・・。
0617578 , 582
02/10/03 11:21ID:v6OPXcCdご回答ありがとうございます、胸のつっかえが取れました。
0618nobodyさん
02/10/03 12:46ID:???ところで UNIX板のシェル、オークスレにまったく同じ質問があるように見えるのは気のせいですか?
いや,マルチだとは思わないんだけどね,それぞれのやり方が知りたいのかもしれないし
0619581
02/10/03 13:38ID:???こうしたらおかしくないですか?
postのデータはどうやって送ってるんですか?
0620nobodyさん
02/10/03 13:48ID:???push (@{"new_ary_$num"},$_);
>>616
いったん全部hiddenにしたform出力してjavascriptで勝手にsubmitするとかダメ?
0621nobodyさん
02/10/03 14:44ID:V3RvumoZ0622nobodyさん
02/10/03 14:53ID:???これってなにしてるんですか?ただの代入?
0623nobodyさん
02/10/03 15:59ID:l7EfCAGl@_にデータがあればその先頭のデータを代入。なければ'あ'を代入。
0624n
02/10/03 16:08ID:KXoffugq0625nobodyさん
02/10/03 16:54ID:???0626607
02/10/03 17:36ID:???あー、ファイルでかいですかー。
じゃあ一行ずつ読み込んで処理してテンポラリに書き出すのは?
たとえば、Sheet1.csvからSheet10.csvの同位置の要素を串刺しに
足していくスクリプトだとこんな感じでどうでしょ。
0627607
02/10/03 17:38ID:???use File::Copy;
copy ('Sheet1.csv', 'Result.csv');
for (my $fileno = 2; $fileno <= 10 ; $fileno++){
open (DATA, "Sheet$fileno\.csv") or die;
open (SUM, '<Result.csv' ) or die;
open (TEMP, '>TEMP') or die;
while(<DATA>){
my @data = split(/,/);
my @sum = split(/,/, <SUM>);
my @result = map {$data[$_] + $sum[$_]} 0..$#data;
print TEMP join (',', @result) . "\n";
}
close (TEMP) or die;
close (SUM) or die;
close (DATA) or die;
unlink ('Result.csv');
rename ('TEMP', 'Result.csv');
}
うーん。もっとカコイイ方法ないかなあ。
あ、それと、607の書き込みの下のコード、間違ってました。ゴメン
0628ふとした疑問
02/10/03 18:28ID:v6OPXcCd&subname();
の形ですよね?
で、普段は&は省略して書いてるんですが
&が無いと動かないサブルーチンとかも在ってチンプンカンプンです
そもそも&はどんな場合に必須となるのでしょうか?
0629nobodyさん
02/10/03 18:54ID:bjQ5Yi4RRegisterClassExに渡すwndClassEx構造体の中で
ウィンドウプロシージャの指定はどうすればいいんでしょう?
Perlでユーザ関数(サブルーチン)を作ってそのリファレンスを渡せばいいのでしょうか?
0630nobodyさん
02/10/03 19:11ID:???○ hogehoge()
× \hogehoge
× \hogehoge()
○ \&hogehoge
0632nobodyさん
02/10/03 19:54ID:FetdaLGe省略記述って言うんだけど、実際の所省略しないほうが手っ取り早くていいぞ。
省略が通るかどうかは、他に前方宣言されているとかそうゆうのも関係ある。
ちゃんと正式に書けばどんな時も困った事にならない。
0633628
02/10/03 20:57ID:v6OPXcCdありがとうございました
自分には省略せずに書くのが見やすいし迷わなくていいかも。
0634nobodyさん
02/10/03 21:10ID:???0635nobodyさん
02/10/03 21:31ID:Wit0Sk8Mprint TXT "\n";
としただけなのに
TXTファイルの改行コードがCRCFになっています。なぜ?
0638nobodyさん
02/10/03 21:50ID:???0639nobodyさん
02/10/03 21:51ID:???0640nobodyさん
02/10/03 21:52ID:???0642nobodyさん
02/10/03 21:54ID:???0644nobodyさん
02/10/03 21:58ID:???0645nobodyさん
02/10/03 21:58ID:???LF(らいん・ふぃーど)
0647nobodyさん
02/10/03 22:34ID:G7kyuSYC本 or サイト どっちでも可
0648nobodyさん
02/10/03 22:44ID:???0651nobodyさん
02/10/04 00:00ID:???感じの言語だね。
0652nobodyさん
02/10/04 00:09ID:???0653nobodyさん
02/10/04 01:36ID:???for($i = 0; $i < 200000; $i++) {
$array1[$i] = 1;
}
#2
$#array2 = 199999;
for($i = 0; $i < 200000; $i++) {
$array2[$i] = 1;
}
先に領域の確保をしておく#2の方が速いと思ったら#1の方が速くなった。なぜ?
http://www.need4xxx.net/asian/hamedori/data/099/dir/index.html
おんなじのコピーしてつくろうとしたけど不可能
0656nobodyさん
02/10/04 08:04ID:iu1Ymefg心ある人は、rubyスレにお礼参りしてください。
0658nobodyさん
02/10/04 09:31ID:???CPANモジュールの全てを網羅するのは不可能かと…。
100や200というやわな数じゃないからねぇ。
有用なモジュールやperldocの日本語化は
http://perldoc.jpで行われてるけど、まだ発足したばかりのプロジェクトだし。
0661649
02/10/04 09:57ID:???>>659
http://member.nifty.ne.jp/hippo2000/perltips/CPAN.htm に
マニュアルはあるけど、これじゃダメ?
0662nobodyさん
02/10/04 10:03ID:???じゃ、引用してやるYo
------
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
ぷぷぷ
反論したいか?反論したいんだろ?ぷぷぷ大爆笑
お前らには無理。
Perlみたいな糞言語を使う奴らは人間以下
------
これがrubyキティ以外の何だってんだ、ドアフォ
あ、これはrubyキティに言ったんで気にしないで。
それが単にRuby厨を騙っているだけなんじゃないか、と皆思ってるわけで。
仮に本当にRuby厨だとしても、もはやそれは言語を超えた厨房でしょ。
無視以外の対策は無いと思うんだよね。
0665nobodyさん
02/10/04 10:36ID:???ところで奴はPerlの新スレはム板には立てるな、PerlはWebprogに
引きこもってろ、というわけ。rubyのスレはム板にいくつかあるよ
ね。Perl==CGIじゃないんで、ム板にも1つくらいPerlスレがあっ
てもいいと思うんだが、奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
冷静に構えてますが、ますますPerl==CGI、ruby>>Perlという
認識が広まっていいわけ?
0666nobodyさん
02/10/04 11:34ID:???http://www.cpan.jp/
>>665
荒らされると、流れが追いかけにくくなるし
こっちで話てる分には文句言わないみたいだし
別に無理してム板に立てる必要もないかナっと
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
奴はスレ立てた奴のIPアドレスは分かっ
てしまうと言って脅してるんで誰も立てんでしょう。「無視」と
0669nobodyさん
02/10/04 12:30ID:???いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0670659
02/10/04 12:42ID:???‥‥‥‥‥‥‥‥漏れ、ここのサイト行ったことあるわ。
なんで見つけられなかったんだろう?
恥ずかしいので、回線切って、首吊ってきます。
0671nobodyさん
02/10/04 13:38ID:???>perl知ってる人間がIPアドレスがばれるなんて事ビビるかよ…
perlを知っているかどうかとは関係ないでしょ。rubyキティが言うように
新スレを立てた人間のIPアドレスが記録されていて一般ユーザも参照可能
かどうかということでしょ。
0672nobodyさん
02/10/04 13:45ID:???1)Apacheなどのhttpdサーバは、httpdサーバにアクセスしたユーザのIPアド
レスと閲覧したページをaccess.logに記録します。(Perlなどアクセス解析ス
クリプトの多くは、このファイルを読んでグラフとか表に整形します。)した
がって、プロバイダの管理者は、特別な場合にこのaccess.logから特定の時間
に特定のページにアクセスしたユーザ情報を知らせることができます。2chで
も、個人名を挙げた誹謗中傷の書きコに対して時々見られます。今回の場合は、
この可能性は、ないと思われますが、問題は、rubyキティがプロバイダ関係、
あるいは2ch管理者関係の人間であった場合です。
2)新スレ立てたヤシ(1だね)に自鯖のHPを見るように誘って、IPアドレス
を抜き取る。
3)perlでは、packet解析も容易にできる。
0673nobodyさん
02/10/04 13:51ID:Ck18zQey#コメント行だけで数キロバイト・・・
やっぱファイルサイズが大きければ大きいだけ速度に影響しますか?
というか50KB程度なら体感的に別に関係ない気もしますが
どうなんでしょう
0674nobodyさん
02/10/04 13:57ID:???だからIP抜かれたから何…
企業からとかならともかく
プロバイダのIPじゃせいぜい
住んでる地域くらいしかわからないじゃん…
荒らしたわけじゃないからアカウント消されるわけでもなし
0676nobodyさん
02/10/04 14:00ID:???コメントの量くらいで体感差はないと思うけど、
気になるならコメントは別のファイルに書いとけば?
コメント自体あんま要らないと思うけど。
0677nobodyさん
02/10/04 14:18ID:???while($linevalue = <TXT>){
}
aaa.txtを一気に全部読み込むことってできますか?
while($linevalue = <TXT>){
$line_all .= $linevalue;
}
で、連結させていくしかないですか?
0678nobodyさん
02/10/04 14:25ID:???perl がスクリプトを解析する部分での影響は殆ど無い。
但しディスク I/O が遅ければ、当然その影響は受ける。
>>677
undef $/;
0679nobodyさん
02/10/04 14:41ID:zNdIxOGz$kakutyousi=~/\.([a-zA-Z]$)/;でいい
0680nobodyさん
02/10/04 14:42ID:???open (TXT, "aaa.txt") || &error("開けません。");
@linevalues = <TXT>;
こういうのをPerlお大尽といいます。
0684nobodyさん
02/10/04 16:02ID:???$full_path =~ s|(?<!^[A-Za-z])[:\\]|/|g;
($path, $basename, $extension) =
$full_path =~ m|^(.*?)([^./]+)((?:\.[^./]+)*)$|;
…過剰?
0685nobodyさん
02/10/04 16:25ID:???やっぱり無視が一番いいと思うな。
>>685
cron
0687nobodyさん
02/10/04 17:01ID:???分かりますた。って、ム板に新スレ「Perlについての質問箱2箱目」
が立ったので、とりあえずって感じ。また、荒らされたら、どうし
ようかってのは残るけど・・・
0689nobodyさん
02/10/04 17:09ID:FKzI73uU{
umask(0);
mkdir("hoge",0777);
chmod(0777,"hoge");
}
これを実行したらhogeフォルダが消せなくなってしまったのですが
このumask(0);ってどういう意味ですか?
0690質問
02/10/04 17:11ID:zDqIUs3vで最期のスラッシュ部分を削るとよくdirectry格納庫が見えるんですけど
これは犯罪なんですか?
まあ、とりあえずいいんじゃない?
荒らしはねぇ…実の所、私はまるで気にならないんだよね。慣れたのかな。
>>689
umask(0)はパーミッション操作に対するデフォルトのマスクを無しにする、
つまり「これからパーミッションを危険な値に設定するけど、これは確かに私が望んだことだからね」って意味。
見たところ、そのコードで作ったディレクトリが消せないとは思えないな。
とりあえずパーミッションを確認してみて。ていうかそういう場合はまずパーミッション確認して。
または、そのディレクトリの中にファイル作らなかった?それなら消せないと思うけど。
余談だけど、最後のchmod()は無意味だね。
>>690
そんなことで犯罪になるわけないでしょ。
0692nobodyさん
02/10/04 17:37ID:???http://pc.2ch.net/test/read.cgi/php/1031721334/292
http://pc.2ch.net/test/read.cgi/php/1031910901/236
0693nobodyさん
02/10/04 17:39ID:zDqIUs3vウザイ
0695nobodyさん
02/10/04 17:46ID:zDqIUs3vん、失敬。
# どっちもチェックしてないスレだ…
0698nobodyさん
02/10/04 17:52ID:zDqIUs3v0699nobodyさん
02/10/04 18:08ID:???マルチ呼ばわりされないといけないのか理解に苦しむ。
もしかして他のスレでzDqIUs3vにレスしてるのも俺だということに
zDqIUs3vの脳内世界ではなっているのであろうか。
そうだとしたらzDqIUs3vは相当おめでたい野郎だ。
0700nobodyさん
02/10/04 18:11ID:???よくあることだな
0701nobodyさん
02/10/04 18:11ID:mwNvTbYDその値を%HEIKINに入れる時に、0/0(ゼロ ÷ ゼロ)
になると、CGIが途中で止まってしまうのですが、
これって、仕様ですか??
foreach (@LIST){
$HEIKIN{"$_"} = $Point{"$_"} / $Count{"$_"};
}
0703nobodyさん
02/10/04 18:14ID:???ほっとけよ
■ このスレッドは過去ログ倉庫に格納されています