【Perl】初心者コーナー Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0002nobodyさん
02/11/20 22:05ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
part17 http://pc.2ch.net/test/read.cgi/php/1034583844/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん
02/11/20 22:07ID:???とすると表示されますが、
perl -F, -ane 'print @F[4];' kyoto.html.csv
……
perl -F, -ane 'print @F[10];' kyoto.html.csv
は表示されません。perlって●を認識するのでしょうか?
0004nobodyさん <sage>
02/11/20 22:29ID:???●って何よ。
0006前スレ991
02/11/20 22:46ID:/E1Vbwszあと、いきなり出て来て1000取ってすいません・・・。
00087
02/11/21 00:20ID:???0009nobodyさん
02/11/21 00:42ID:???LWP::Simpleモジュールが入っているなら
perldoc lwpcookして出てくる文書読んでみるとやり方出てるよ。
use LWP::Simple;
getstore "http//:www.yahoo.co.jp", "yahoo.html";
みたいな感じ。
0010nobodyさん
02/11/21 00:49ID:izFT1sBO┃ ┃┏━┛ ┗┫┃┃ ┃ ┃┏━┓┃┃┃
┗━┳━ ┃┃ ┗╋┛┏━━━━┓┗━┛┃ ┃┃┃┃
┃ ┃┗━┓ ┏━┛ ┃ ┃ ┃ ┃┃┃┃
┃ ┏━┛┏┓┃ ┃┏┓ ┗━━━━┛┏━━┛ ┃┗┻┛
、 ┃ ┃ ┃┃┃ ┃┃┃ .‘; ゜ ・ ┃ ┃
、 ┃ ┃ ┃┃┃ ┃┃┃ .‘; ゜ ・ ┃ ┃┏┳┓
┗━┛ ” ;┗┛┗━┛┗┛ ノ ┗━━━━┛┗┻┛
∧_∧ ヽ(。、::。.::・'゜・' )〆 .' ,
( ゚∀゚)__ ( 。、 ::。 ).。:: θ) .∴ '
r'⌒ ̄ ̄ ̄ ̄ (。、::。.::・'゜。'゜ )ゝ| ・,‘
|  ̄ ̄ ̄ ̄ ) ヘ( 。、 ::。 )ヽ | | ←>>1
\ │ ’ Υ γ | |
ヽ │ ⊂.J| ) し`⊃ ヾ
( ヽ | || |
\ \\ | |.| |
\ ヽ ヽ ( 丶( \
> ノ ノ \ \\ \
/ /| / ) \. ) \
/ // / (_/ .(_/
/__// /__
〈_ __〉 _ __〉
0011nobodyさん
02/11/21 18:30ID:La3b0kHh例:$#hogehoge
0012nobodyさん
02/11/21 18:52ID:???使えない。
$#hoge は配列 @hoge の最後のインデックス値。
Perl で変数名に使えるのは英数字とアンダーバー。
ただし $ に続く一文字目が数字の場合、
変数名はすべて数字でなくてはならない。
で、あってる?
0015nobodyさん
02/11/22 16:14ID:UpQRYD34"01","09","01","21"
"01090121"
としたいのです。各値は実は日付で整数演算で日付の
更新を行っていますが、更新されたあとの数字を繋げると
"19121"
のように整数2桁にはなりません。
どうしたらよいのでしょうか?
0016nobodyさん
02/11/22 16:40ID:???my @ctg_ids = ();
while (length($ctg_id_) > 1) {
push (@ctg_ids,$ctg_id_);
chop $ctg_id_;
}
------------
$CTG_ID = 'MK0010'
↓
@ctg_ids = (MK0010,MK001,MK00,MK0,MK)
というコードを一行にしてください。
0018nobodyさん
02/11/22 17:11ID:???配列だとしたら、
@array = ("01","09","01","21");
join('', @array);
それ以外なら sprintf で %02d のフォーマットで出力すれば良。
0019nobodyさん
02/11/22 17:28ID:UwQQAcbpわかっているのは現在の西暦と月($nowYear、$nowMon)で、
ユーザーから与えられるのはページ番号($pg)とします。
1ページに 3ヶ月まとめて表示します。
未来については問題ないのですが、過去を表示させようとすると
「/12」でやっているのでマイナス値が出せません。
もっと効率のよい式はないでしょうか?
-------------------------
$nowYear = 2002;
$nowMon = 11;
$pg = 0;
foreach $i ( 0 .. 2 ){
$mon = ($nowMon + $i + $pg * 3) % 12 + 1;
$year = $nowYear + int((($nowMon + $i) + ($pg * 3) -1) / 12);
print "$year / $mon\n";
}
-------------------------
002015
02/11/22 19:48ID:UpQRYD34ありがとう。解決しました。
0021nobodyさん
02/11/22 20:55ID:???my $ctg_id_ = $CTG_ID; my @ctg_ids = (); while (length($ctg_id_) > 1) { push (@ctg_ids,$ctg_id_); chop $ctg_id_; } ------------ $CTG_ID = 'MK0010' ↓ @ctg_ids = (MK0010,MK001,MK00,MK0,MK)
0022rubyist@カラアゲうまうま
02/11/22 20:58ID:???002323
02/11/22 23:11ID:???@data = (taro ,Jiro, Sabro);
@temp = ('$b');
foreach $b(@data){
foreach $c(@temp){
$c =~s/\$(\w+)/${$1}/g;
print $c;
}
}
とやって、ほんとは「taroJiroSabro」と表示したいんですが
「tarotarotaro」となってしまいます。
どうすればいいのでしょう
002423
02/11/22 23:13ID:???@data = (taro ,Jiro, Sabro);
@temp = ('$b');
foreach $b(@data){
foreach $c(@temp){
$c =~s/\$(\w+)/${$1}/g;
print $c;
}
}
とやって、ほんとは「taroJiroSabro」と表示したいんですが
「tarotarotaro」となってしまいます。
どうすればいいのでしょう
0025nobodyさん
02/11/23 00:16ID:TlwVHlkv0027nobodyさん
02/11/23 00:56ID:???$c =~s/\$(\w+)/${$1}/g; は止めて
print eval $c;
なら「taroJiroSabro」になりました。
でもこれって正しいやり方なんですかね
0028nobodyさん
02/11/23 05:29ID:???だとxxx.txtは自動生成されないので直前に
open(F, "xxx.txt");
を入れようとしましたけど、その場合直後でcloseすべきですか?
となるとflockも必要ですか?
ていうか煩雑なのでもっとスマートなやり方はないですか?
003019
02/11/23 10:38ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#Date2WDay
の方法で use Time::Local; することにしました。
003128
02/11/23 13:53ID:???+>>なんて初めて見ますた。
flockを使う上で一番安全ぽいと思われたのでわざわざ+<を使っていたわけですが
+>>てのは具体的にどんな動作するんでしょか。
0032nobodyさん
02/11/23 21:45ID:???CGIで、フォームのデータを%inにしまってあって、
それをJcodeモジュールで片っ端からコード変換したいのですが
全部のキーに対して変換をかけるとエラー吐かれますた…
んで、次にgetcodeでsjis、euc、jisの時のみ変換をかけるようにしたのですが
フォームの中にラジヲボタンとかがあり、配列のリファレンスに対して
getcodeしようとするとエラーを吐かれてしまい、困ってます
全部変換しようとする>エラー
日本語だけ変換>コードをゲトしる>エラー
これ以上おヴァカな自分には対処方が思いつきません、どうか御教授くださいませ…
0033rubyist@カラアゲうまうま
02/11/23 21:49ID:???0034nobodyさん
02/11/23 22:35ID:???ちょっと自分で検証ミスが有ったようで、なんかgetcodeはできるぽでした…
その後の処理が上手くいってないのかもです
[Jcode.pm:575:die] Not a SCALAR reference at C:/Perl/site/lib/Jcode.pm line 575, <DATA> line 1579.
上記のエラーが出てました…
ラジヲボタンのフォームとか場合によってリファレンスだったり普通の値だったりしてわけわかんない・゚・(ノД`)・゚・
0035nobodyさん
02/11/23 22:54ID:zBuUfsU+if (-e $a)
なんですが
ファイルをOpenするとかなりパフォーマンスは悪くなりますよね?
これも悪くなるのでしょうか?
0038nobodyさん
02/11/24 15:36ID:???>>36
cgi-lib.plかなんかを使っているのではないかと想像してみる。
まあ、自分のやったことを全部言わない>>32がアレなんだが。
0039nobodyさん
02/11/24 15:57ID:???上記の場合は、どちらを使うのが普通なのでしょうか?
用途が違うからなんとも…。
例えば、変数の中身が'0'だと前者は偽、後者は真になるよ。
004223
02/11/25 00:00ID:???自己レスです。
@data = (taro ,Jiro, Sabro);
@temp = ("\$b", $b ,$b);
foreach $b(@data){
foreach $c(@temp){
$d = $c;
$d =~s/\$(\w+)/${$1}/g;
print $d;
}
}
こうすれば、ちゃんとtaroJiroSabroになりました。
0043.32
02/11/25 17:33ID:???>>36
すみません、勉強不足なようでわかりません
>>38
CGI::Lite使ってまつ
>>41
Σ(´Д`;)そんな関数があたのか…
いろいろヒントいただきましたので、がんがってみます、ありがとうございました
004438
02/11/26 00:49ID:???CGI::Lite の使い方を最初から勉強しなおせ。
悪いことは言わないからさ。
そもそも、「%inにフォームのデータをしまって」あるのがわかっているなら、
いつ%inに格納したのかわかるだろうに。
0045nobodyさん
02/11/26 16:45ID:Y+XqV5xbこれからやるならDBは何を使えばいいんでしょうか。
他のスレ読むと、PostgresSQL+Pg.pmよりもDBIを使えとかいろいろ書いてありましたが
初めてなのでよくわからないです。実際はPg.pmというのを使ってる人が多いみたいですし。
いい方向へ誘導してください。
追伸:InterBaseってどうなのですか?
0046nobodyさん
02/11/26 17:25ID:???0048nobodyさん
02/11/26 21:48ID:???bashのsourceコマンドみたいなものってないのでしょうか?
0050nobodyさん
02/11/26 22:24ID:kEoHEjhGここみたいに、Enterキー押した時は認証しないのに
loginボタンをクリックした時は何故かCGIに認証しに行きます。
Enterキー押した時も認証しに行くようにするには
どうすればいいんでしょうか?
005250
02/11/26 22:33ID:kEoHEjhGボタンの値を見ておいて・・・というとどういう事ですか?
フォームタグではなくてCGI側の問題ですか?
0054nobodyさん
02/11/26 22:54ID:???005550
02/11/26 22:54ID:kEoHEjhGた、たしかにスペルは間違ってますが、、、
でもクリックだと認証に飛びますけどね・・
0056nobodyさん
02/11/26 23:03ID:???それはブラウザ依存だ。
IEの場合、formタグのaction属性がない場合、action属性を自分自身に設定する。
だから、クリックだと自分自身に飛ぶ。
0057nobodyさん
02/11/26 23:07ID:???クリックすると、type="submit" のnameとvalueが渡される。Enterキーだと
それが渡されない。
だから、type="password" のほうのnameとvalueだけ見て処理しろと>>51は
言っている。
005850
02/11/26 23:08ID:kEoHEjhGなるほど、分かりました。
どうもすみません
0059nobodyさん
02/11/26 23:11ID:???Perlでデータベースを扱おうと思ったら、その仲立ちをするモジュールを使うのが楽でいい。
Pg.pmはPostgreSQLとの接続専用のモジュール。
だが、DBI.pmとPostgreSQL用のDBDの組み合わせでも同じことができる。
(細かいやり方は違うだろうが)
同じことをするのに二つのモジュールを使うのは無駄だと思うかも知れないが、
こうしておくと、将来別のデータベースを使わなければならなくなった時に、
DBDを差し替えて、スクリプトをちょっと(多分一行)だけ変更すれば、
そのまま動くようになると言う利点がある。
これからの生涯でずっとPostgreSQLしか使わないと言うのであれば構わないが、
そうでなければ、DBI.pmを使うことを勧める。
ま、どっちを選ぼうが自由なんだがな。
0060nobodyさん
02/11/26 23:28ID:???0061nobodyさん
02/11/27 00:38ID:???http://palmperl.sourceforge.net/
006260
02/11/27 01:46ID:???全然順調じゃないじゃん
ぇゃ、ほんと有り難うございますた、なんかスゲェ質素なページでしたが(藁
検索しても引っかからなかったんですけどねぇ…
完成を心待ちにしときます
0063nobodyさん
02/11/27 09:27ID:???か
perl -F" " -ane 'if($F[1] >=130 && $F[1] <=170 && $F[2] >=30 && $F[2] <=60) {print $_;} tmp1 > $ofile
か
perl -F" " -i.ofile -ane 'if($F[1] >=130 && $F[1] <=170 && $F[2] >=30 && $F[2] <=60) {print $_;} tmp1
はどれが一番速いのですか?
0064nobodyさん
02/11/27 10:37ID:???set min = `awk '$3 <= 0.9 {print $0}' aho.txt | sort +1 -n | head -n 1`
echo min[1]
foreach time ( 90621)
ifile = hoge${time}.txt
set gyou = `awk '$1 == '$time' {print NR}' date.txt`
awk 'NR >= '$gyou' && NR <= ('$gyou' + 80) {print $0}' date.txt > tmpA
paste $ifile tmpA > tmpB
awk '( NR % 2 ) == 0 {print $0}' tmpB > tmpC
set gyousu = `awk '$5 > 0 {print $0}' tmpC | wc -l`
if ( $gyousu == 40 ) then
set temae = 40
else if ( $gyousu < 40 ) then
set aaa = `awk '$5 < 0 {print NR}' tmpC | head -n 1`
set temae = `awk 'NR < '$aaa' {print $0}' tmpC | wc -l`
endif
echo $temae
end
0065nobodyさん
02/11/27 10:41ID:???set min = `awk '$3 <= 0.9 {print $0}' aho.txt | sort +1 -n | head -n 1`
echo min[1]
と
set gyou = `awk '$1 == '$time' {print NR}' date.txt`
awk 'NR >= '$gyou' && NR <= ('$gyou' + 80) {print $0}' date.txt > tmpA
paste $ifile tmpA > tmpB
awk '( NR % 2 ) == 0 {print $0}' tmpB > tmpC
set gyousu = `awk '$5 > 0 {print $0}' tmpC | wc -l`
をそれぞれperlで書くとどのような感じになりますか?
いいかげんな感じでいいので、perlの構文教えてください。
調べてたら、卒論かけません。
本来のcshスクリプトでは
foreach time ( 90621 90609 90521 90509 83021 83009 81821 81809 81721 81709 81621 81609 81521 81509 80821 80809 80721 80709 80621 80609 80521 8050
9 80421 80409 80221 80209 72921 72909 72821 72809 72721 72709 72621 72609 62121 62109 61021 61009 60921 60909 60821 60809 52209 50521 50509 50421
50409 50321 50309 50221 50209 50121 50109 43021 )
となっており、このスクリプトでは遅すぎて、話しになりません
アフォですみません。
0066nobodyさん
02/11/27 10:51ID:???という、YYYYMMDDという日付データがあった場合に、
「今日からあと何日でその日が来るか」を算出するのにはどうしたらいいのでしょうか。
006766
02/11/27 10:55ID:???例えば、20020631という日付データがあって、
その日から3ヶ月後は何日か求めたい時はどうすればいいですか。
普通に20020931にしても、9月は31日が無いかもしれないですし、
うるう年とかで2月は28日だったり29日だったりしますよね。。
0068nobodyさん
02/11/27 10:56ID:???0069nobodyさん
02/11/27 11:04ID:???timelocal()を使うと楽。
>67
じゃあ、8月31日の3ヵ月後の11月31日が存在しなかった場合はどうするの?
なかった場合どうするかを先に決めないと何もできない。
0071nobodyさん
02/11/27 11:30ID:???なると思いますじゃねーだろ。
どういう仕様にしたいか決めないと出来ないってんだよ。
0072nobodyさん
02/11/27 11:32ID:???>70は>66-67みたいな事がしたくて
それでどんな風にやってみて、
それだとどんなエラーが出て上手く行かなかった
んだ?
自分で何もせずにやり方聞いてるわけじゃないよな?
>1読め。
0074nobodyさん
02/11/27 12:01ID:???その文字数分、処理をループさせたいのですが、
これだと何も出来ませんでした…。
要するに、入力されたひらがな($tango)を、
ローマ字に変えてファイルに書き込みたいって事なんですが…。
$mojisu = length $tango;
while ( $x < $mojisu ){
$moji = substr($tango,$x,2);
if ($moji = "あ"){print $romaji "a"};
・
・
・
$x = $x+2;
}
■ このスレッドは過去ログ倉庫に格納されています