Perl 初心者コーナー Part23
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/05/16 11:18ID:zDRBc/j4【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0717本当の本物707
03/06/01 03:08ID:5qKTyD6i僕が、変な質問の仕方したばかりに、
偽者が現れて、荒れてきてます。。。
>>716は、偽者です!
僕は、今ちゃんとまじめに勉強してます。
今後も、もしかしたら僕の偽者が現れるかもしれませんが、
どうか、放置してください。
本当の本当に、ご迷惑をおかけしました。。。。
IDも晒しておきます。
0718直リン
03/06/01 03:10ID:FDrVWEME0721nobodyさん
03/06/01 03:40ID:???んだから、板違い/スレ違いが来たら叩くだけだC〜
その結果スレが荒れたって困らないC〜
荒れて困るほど人が多い板じゃないC〜
0722nobodyさん
03/06/01 03:54ID:???荒れると、困るというか嫌だが、何か?
俺以外でも、そう思うヤツはいてると思うが、何か?
荒れて良いなんて思った事なんて、一度もない。
Perl使ってCGI組んでる俺は、PerlだろうがPHPだろうが、
WebProg板全体のレベルアップを願う一人だ。
0723nobodyさん
03/06/01 04:36ID:???あまりに下らない流れを発見した。
0724nobodyさん
03/06/01 04:36ID:???0725670=676
03/06/01 05:30ID:6WOnkruh有り難うございます。
$y = 2;を、$x = "$y";で展開すると、$xは2(数値)ではなく、"2"(文字列)
になるということですね。
言われてみれば当り前のことですが、これがはっきり認識できていません
でした。
0727nobodyさん
03/06/01 12:47ID:???0728nobodyさん
03/06/02 02:35ID:???unlessやらuntil使わずに、ifとwhileに!を組み合わせて使う。
ナンデダロ(・∀・)
0730nobodyさん
03/06/02 08:32ID:???ご紹介してもらえませぬか?
0731nobodyさん
03/06/02 08:38ID:???こういう所でいいのかな?
ttp://www.mikeneko.ne.jp/~lab/perl/numerical_transform/
0732nobodyさん
03/06/02 12:25ID:s70dOIFMDBのように外部キーなどを使って管理しています。
(なお、telnet使えないため、DBD::CSVモジュールなどをいれられません)
------------------------------------------------------------
●機関マスタorgmaster(orgmaster.csv)
各列は、
・orgid(主キー)
・orgname(テキスト)
・countryid(外部キー)
●国マスタcountrymaster(countrymaster.csv)
各列は、
・countryid(主キー)
・countryname(テキスト)
・seq(数値)
------------------------------------------------------------
で、単に、機関マスタを開いて、countryid別にソートして機関名を表示
(selet orgname from orgmaster order by countryid)
というのなら、以下の手順でできるというのはわかるのですが・・・
(1)機関マスタを開く
$ORG[$values[0] = {
'orgname' => $values[1],
'countryid' => $values[2],
};
(2)ソートして表示
@tmp = sort { (${ORG[$a]->{countryid}} <=> ${ORG[$b]->{countryid}}) } 0 .. $#ORG;
foreach (@tmp) {
print 'orgname='. $ORG[$_]->{orgname}. " / ";
print 'countryid='. $ORG[$_]->{countryid}. "<br>";
}
(つづく・・・)
0733732
03/06/02 12:25ID:???ここで、質問です。上記のものを変更して、
★国名も表示させるには、どうすればいいのでしょうか?
(selet orgmaster.orgname, countrymaster.countryname
from orgmaster, countrymaster
order by countryid
where orgmaster.countryid = countrymaster.countryid)
★もし可能なら、ソート順をcountrymaster.seqにするにはどうすればいいのでしょうか?
(selet orgmaster.orgname, countrymaster.countryname
from orgmaster, countrymaster
order by countrymaster.seq
where orgmaster.countryid = countrymaster.countryid)
0734732
03/06/02 12:28ID:???教えていただければ幸いです
0735nobodyさん
03/06/02 12:37ID:???わからん・・・
何を聞きたいのかが分からん・・・
手順だけを教えてくれって・・・
処理のアルゴリズムは、プログラマーが考える事であって・・・
処理方法は、何十種類も、何百種類もある。
ところで・・・お前は、ソートの動きを理解してない、いつぞやのヤツでは?
0736732
03/06/02 12:43ID:???あー、そうなんですね・・・。言われてみれば確かに。
定石でもあればと思ったのですが・・・
>ソートの動きを理解してない、いつぞやのヤツでは?
どうなんでしょう。
ソートで質問したことはあるけど、最終的には理解したつもり。。。なんですが・・・
0738732
03/06/02 14:00ID:???正直、質問したときは、どっから手をつけていいか???な状態でしたが、
ついさっきひらめきまして、方法はこんなかんじです。
なんか、想像してたよりかずっと楽にできたので拍子抜けなんですが、
どうなんでしょう?まだ冗長な部分とかありますでしょか?
▼国マスタを開いて、下のように国ごとの名称と順番を取得しておく
$COUNTRY[$values[0]] = {
'countryname' => $values[1],
'seq' => $values[$2],
};
▼機関マスタの情報を$ORGに代入する際、以下のように、
「機関マスタ.countryid=国マスタ.countryid」となるような、
国マスタ.countrynameや国マスタ.seqを、ひっぱってくる。
(ここから後は、外部テーブルを意識する必要はなく、$ORGの処理に専念すればOK)
$ORG[$values[0] = {
'orgname' => $values[1],
'countryid' => $values[2],
'country_contryname' => $COUNTRY[$values[2]]->{contryname}, #国マスタ.contryname
'country_seq' => $COUNTRY[$values[2]]->{seq},#国マスタ.seq
};
▼$ORGをいじくる(ソート基準をcountry_seqにして、表示する対象をcountry_contrynameにする)
@tmp = sort { (${ORG[$a]->{country_seq}} <=> ${ORG[$b]->{country_seq}}) } 0 .. $#ORG;
foreach (@tmp) {
print 'orgname='. $ORG[$_]->{orgname}. " / ";
print 'country_contryname='. $ORG[$_]->{country_contryname}. "<br>";
}
0739nobodyさん
03/06/02 14:33ID:???いや・・・
それでできたなら、それでいいんじゃない?
一言言わせて貰えば・・・
なぜ、二つのリファレンスで管理してるのか・・・
一つで管理してれば、そんな処理せずソートできるのに。
・・・と、この辺は、そちらの都合でそうしてるんだろうし。
これ以上、何も言う事はないかな。
何作ってるか知らんが、適度にがんがれ。
0740名無しさん@お腹いっぱい。
03/06/02 15:39ID:vewE58z20741nobodyさん
03/06/02 15:52ID:NLUHomb+グロブかディレクトリハンドルを使う。
この二つはファイル名とドットファイルの扱いが違う点に注意。
0742名無しさん@お腹いっぱい。
03/06/02 16:19ID:vewE58z20743名無しさん@お腹いっぱい。
03/06/02 19:18ID:vewE58z2検索ではなかなか出てこなくて・・・
0744nobodyさん
03/06/02 19:20ID:???横幅や縦幅を取得するにはどうすればいいのでしょうか?
0745nobodyさん
03/06/02 19:26ID:???mkdirを使う。
ちなみに「フォルダ」じゃ見つかりにくいと思われ。「ディレクトリ」で探そう。
>>744
Perlと無関係。
0747名無しさん@お腹いっぱい。
03/06/02 19:46ID:vewE58z2ありがとーう。
mkdir($Dir, 0777);としても755になっちまいましたが。
作ったディレクトリの中にファイルを作ったり出来たんで上手くいきました。
0748nobodyさん
03/06/02 19:56ID:???で、ページをSJISで吐き出していたのですが、
あるときから、ページの一部がEUCで吐き出されるようになってしまいました。
# HTMLテンプレートをオープン
my $template = HTML::Template->new(filename => $PathTmplStart);
# パラメータを埋める
&jcode::convert(\$HtmlYou_are_here, "sjis");
$template->param(
YOU_ARE_HERE => $HtmlYou_are_here,
);
# テンプレートを出力
print $template->output;
このコードで、「YOU_ARE_HERE」の部分はSJISで表示されますが、
それ以外の部分はEUCで表示されてしまいます。
テンプレファイル($PathTmplStartのファイル)はSJIS、スクリプトはEUCです。
どのタイミングからこうなってしまったかは不明ですが、
しかし、正常な表示のときと今とでは、上記コード部分はまったく変わっていません。
なお、同じcgiファイル中で、HTML::Templateを使っている全てのかしょで、
同様の現象が起きています。
いったい、どこを疑えばいいのでしょうか?
0750nobodyさん
03/06/02 20:51ID:???0751nobodyさん
03/06/02 21:09ID:8SqwvWBe0752動画直リン
03/06/02 21:10ID:mGHfwiJV0753預言者
03/06/02 21:33ID:???0755748
03/06/02 22:27ID:???いや、
print "Content-Type: text/html\n\n"; は、すでにこの時点で、
書いてます。(ずっと前の方で)
ただ、sjisとは書いていませんでしたが。
でも、ページ全体が化けるばけでなく、
ページの1部分(パラメータYOU_ARE_HERE 以外の部分)が化けるんですよね。
(で、IEでエンコードをEUCにすると、逆にパラメータYOU_ARE_HEREの部分だけが化ける)
だから、sjisと書いてないこととは別だとは思うのですが・・・
(ただ、今は、開発してた環境(ていうか会社)ではないので、試せてはいないのですが)
それに、今まではsjisと書いてなくても化けてなかったし・・・
0756nobodyさん
03/06/02 22:32ID:???0758nobodyさん
03/06/02 22:51ID:???>>757を補足。
Image::Size モジュールとか、
GDモジュールとか、
Image::Magickモジュールとか、その辺をググれ。
上から順番に簡単。
0759nobodyさん
03/06/02 22:55ID:???念のためにコンテントヘッダーと、<meta>の両方を使って文字コードをsjisにしてみる。
それでもなおわからないのであれば、
1.エディタを疑う。(勝手にEUCにして保存してないか)
2.鯖の設定を疑う。
もう一度確認してみたまい。
7度探してって言うだろ?
0760nobodyさん
03/06/02 23:04ID:9tPqBm3m日本語の部分が文字化けしてることがあるんですが
どうやれば文字化けしないで済みますか?
編集したくてもできなくて困っています。
0761直リン
03/06/02 23:10ID:mGHfwiJV0762nobodyさん
03/06/02 23:10ID:???スレ違い。
EUC-JPなどSHIFT_JIS以外の文字コードにも対応している
テキストエディタ使いなさい。
http://www.vector.co.jp/
0763nobodyさん
03/06/02 23:21ID:9tPqBm3mそこからエディタをDLしたら文字化けが直りました。
ありがとうございました。
0764名無しさん@お腹いっぱい。
03/06/03 01:02ID:0MDIlf0dmkdirによって作成したディレクトリとそれ以下のファイルがFTPアップローダ側からの
削除が出来なくなってしまいました。
tripodで色々と試していたときにもディレクトリが削除できなくなってしまったことがあるのですが、
(FTP側から)何かPERLスクリプトに問題でもあるのでしょうか?
誰か情報お持ちの方教えてください。
0765動画直リン
03/06/03 01:10ID:HzexL3AB0766764
03/06/03 01:20ID:0MDIlf0d報告としてはmkdirのあとに更にchmodをすることで解決するようです。
0768nobodyさん
03/06/03 02:09ID:6112bZiohttp://homepage3.nifty.com/coco-nut/
そしてあぷろだはここ
http://www.k-514.com/imgbbs1/imgboard.cgi
0769748
03/06/03 11:54ID:???(ちなみに秀丸)
一応、もう1回、SJISで明示的に保存したら、うまくいきました。
と、同時に、別のかしょ(テンプレートファイルもまったく別<いじってない)
が、このあと全てなおってました。。。
意味不明です。。。まぁ、なおったからいいんですが・・・
0770nobodyさん
03/06/03 12:09ID:1E21CA310771nobodyさん
03/06/03 13:26ID:8vlIkX7m文字数が偶数個であることは保証されています。
s/(..)/$1 /gで一旦変換後split, hexするのは思いつきましたが、もっとカコイイ書き方はありますか?
0772nobodyさん
03/06/03 13:29ID:???http://www.i-say.net/cgi/tips_listview.php3
0774nobodyさん
03/06/03 14:22ID:???MS-DOS や windows のファイル共有で使う UNC 名(?)を
open や opendir で使うにはどの様な書式でファイル名を
渡せばいいのでしょうか?
$name = '\\\\share_name\\dir\\';
opendir( DIR, $name );
とか、やっても駄目でした。
0776nobodyさん
03/06/03 15:41ID:???無限ループ内でm個になるまでpopするくらしか思いつかない。。
0779776
03/06/03 15:50ID:???ありがとうございます。
splice、すっかり忘れてた。恥かしい限りです。
0780771
03/06/03 17:11ID:???unpack('a2' x (length($str) / 2) , $str);
0781nobodyさん
03/06/03 19:59ID:???というエラーが出てしまいます。
もちろんjcodeはいじってませんし、なお、jcode.plは最新版です
この場合のデバッグって、どういう姿勢というか考え方で行なえばいいのでしょうか?
どこを直せばいいかまったくわからず・・・
0782nobodyさん
03/06/03 20:07ID:???まず辞書をひく。
0783nobodyさん
03/06/03 20:34ID:PcOC09toえとアクセスしたらIPとそのアクセスした日にち・時間をログに保存するスクリプト教えてください。
お願いします!!ちなみにこれは荒らし対策です
0784781
03/06/03 20:37ID:???エラーが出なくなりました。
>>782 いや、英語はわかるんですけどねー・・・
結局原因がわからなかったものの、解決してしまいました(なんか歯切れが悪いですが)
0785nobodyさん
03/06/03 20:48ID:???スレ違いだがね。
http://www.google.com/search?as_q=%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%AD%E3%82%B0%E8%A7%A3%E6%9E%90
0786nobodyさん
03/06/03 20:53ID:EuO1wjCe行末に時間記述のあるテキスト xxx.txt を
時間順に修正、上書きすることってできるでしょうか?
xxx.txt
------------------
.... 01-jan-2002
.... 02-jan-2001
.... 01-jan-2001
------------------
↓
------------------
.... 01-jan-2001
.... 02-jan-2001
.... 01-jan-2002
0787nobodyさん
03/06/03 21:10ID:9Ku6+BeZというエラーが出てしまいます。
もちろんjcodeはいじってませんし、なお、jcode.plは最新版です
この場合のデバッグって、どういう姿勢というか考え方で行なえばいいのでしょうか?
どこを直せばいいかまったくわからず・・・
0788nobodyさん
03/06/03 21:28ID:???おまえは本物のアレか?
「読んだけどよくわかりませんでした」
jcode内部にfなんてルーチンねえよボケって意味だろうが。
可能性としては、
1.おまえのjcodeの扱いが変。
マニュアル読みつつ、jcode呼び出してるところを全部チェックする。
2.jcodeのバグ。
製作者に報告。
ま、1を5000回くらいやってから2だと結論するようにな。
0789nobodyさん
03/06/03 21:33ID:???0790nobodyさん
03/06/03 21:48ID:???やり方次第で。
とりあえず思いついたのは、
1.一行取り出して、
2.末尾の時間をコピーし、
3.それをepoch秒に変換し、
4.この秒をキーにしてハッシュに行全体を代入する。
これをファイルが尽きるまで繰り返す。
5.ハッシュからキーを全て取り出し、
6.数値として扱ってソートする。
7.ソート後の順番で値を全部ファイルに出力すれば、完成。
実際のコーディングで難しいのは、3のあたりかもなー。
Dateなんたらモジュール使えば楽にできそうな気もする。
力技で20030603214900みたいな形式に変換しても用は足せるだろうが。
0791786
03/06/03 22:38ID:EuO1wjCeレスありがとうございます。
う〜ん、なんか初心者の私には難しそうですね。
さくっとあきらめようかしら。
0792nobodyさん
03/06/03 22:44ID:I9aep0OWhttp://www1.free-city.net/home/s-rf9/page006.html
0793直リン
03/06/03 23:10ID:HzexL3AB0794nobodyさん
03/06/03 23:15ID:???0796nobodyさん
03/06/03 23:22ID:???ソースを晒してみろ。
バグが出てる部分だけでもいいし、
全部を、どこかのアプローダーに上げてもいいし。
少し、見てやるから。
0797791
03/06/03 23:23ID:???0798796&797
03/06/03 23:24ID:???誤爆2回ですた。
0799nobodyさん
03/06/03 23:52ID:???ちょっと書いてみた。年号・月名(文字変換)・日の順番に並べてからソート。
同じ日のデータが複数行があるとだめぽ。そのときは、改作しる。
%mon=qw(jan 01 feb 02 mar 03 apr 04 may 05 jun 06 jul 07 aug 08 sep 09 oct 10 nov 11 dez 12);
@mon=qw(jan feb mar apr mai jun jul aug sep oct nov dez);
while(<>){
chomp;
split;
($date=$_[$#_])=~s/(\d+\-)(\w+)(\-\d+)/$3$mon{$2}$1/;
$hash{$date} = $_;
}
foreach $key (sort {$a <=> $b;} keys %hash) {
print $hash{$key}, "\n";
}
0800nobodyさん
03/06/04 02:44ID:???大分類の数字(01など)がトリガーになって、対応する小分類の中身を全て表示する、という風にしたいのですが、どうもうまくいきません。
例えば
$data{'01'} = { "エンピツ" => 100, "消しゴム" => 80 };
$data{'02'} = { "ネクタイ" => 1000, "ワイシャツ" => 1500 };
$data{'03'} = { "コート" => 10000, "マフラー" => 2500 };
while(($num,%temp) = each(%data)){
print "$num<BR>\n";
while(($name,$price) = each(%temp)){
print "$name $price<BR>\n";
}
print ".......<BR>\n";
}
としても
0801800
03/06/04 02:44ID:???HASH(0xbc864)
...
02
HASH(0xcd5c4)
...
03
HASH(0xcd6cc)
...
と、よくわからないものが返ってきてしまいます…
%kind01 = ( "エンピツ" => 100, "消しゴム" => 80 );
としておいて
$i = '01';
while(($name,$price) = each(%kind$i)){ print "$name $price<BR>\n"; }
としてもエラーになってしまいます。
どのようにするのがベターなのでしょうか…
0803800
03/06/04 03:50ID:???ありがとうございます。今モーレツに感動してます(;´Д⊂ヽ
ぐぐって一発目に出てきたページをみて組み直しました。
$data{'01'} = { "エンピツ" => 100, "消しゴム" => 80 };
$data{'02'} = { "ネクタイ" => 1000, "ワイシャツ" => 1500 };
$data{'03'} = { "コート" => 10000, "マフラー" => 2500 };
$hoge = '01';
$temp = \%data;
$x = $$temp{$hoge};
while(($i,$j) = each(%$x)){
print qq|種類"$i" 値段"$j"円<BR>\n|;
}
たったこれだけで出来るとは・・・すげー(;´Д⊂ヽ
0804800
03/06/04 04:00ID:???考えたやつエライ(;´Д⊂ヽ
興奮が収まらない・・・
0805786
03/06/04 10:33ID:nmL3emss>>799
レス、ありがとうございます。
やっぱり始めたばかりの私には
まだ荷が重いみたい(〃▽〃;)
勉強して出直してきまーす。
0806nobodyさん
03/06/04 10:42ID:???if ($flag) とやるみたいに、
論理値 $HOME[$myhomeid]->{flag} に対して、
if (!$HOME[$myhomeid]->{flag})
としたいのですが、
できない模様です。
どのように表現すればいいのでしょうか?
if ($HOME[$myhomeid]->{flag} == TRUE)
とするしかないですか?
0808nobodyさん
03/06/04 10:53ID:???せっかく作ってやったんだからやってみろよ。
>>799の@mon=...の行は不要だった。消してね。
それとよく見たら、昇順ソートしたいのね。
それなら、{$a <=> $b;}ってとこ、{$b <=> $a;}にすればできるよ。
0811nobodyさん
03/06/04 11:09ID:???ああ・・・なるほど。
それじゃ、俺も同じく・・・
文字列を評価して偽の判定を期待してるに3000カノッサとスパーひとしくん人形を20個。
0812直リン
03/06/04 11:10ID:qArPuVJp0813nobodyさん
03/06/04 13:06ID:tEfKxFs60814nobodyさん
03/06/04 13:15ID:???スレ違い
Perl書くのにどんなエディタ使ってる?
http://pc2.2ch.net/test/read.cgi/php/1014357485/
使いやすいエディタって何よ?
http://pc2.2ch.net/test/read.cgi/php/991372719/
0815_
03/06/04 14:11ID:???0816nobodyさん
03/06/04 15:14ID:???http://pc2.2ch.net/test/read.cgi/php/1049514428/301
これに
> 1、goto文なんか使うな!
って書いてある。
漏れも誰かかにそう言われてずっとそれを守っているのだが、
(つーか、使いたい状況になったことはないが)
何で「使うな」のかと今自分に問いただしても答えが出せない。
ぐぐってみても、C言語でgoto文使う香具師は云々はヒット汁が、
perlでは見当たらない。
だれぞ漏れにgoto文使うなの意味を教えれ!
■ このスレッドは過去ログ倉庫に格納されています