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

Perl コーディング初心者質問コーナー Part35

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/05/26 16:48ID:kkhhiYmo
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0175nobodyさん04/06/06 21:20ID:???
wallclock secs: 実時間(起動してから終わるまでの時間)
usr: (そのプログラム自身が)ユーザモードで消費したCPU時間
sys: (そのプログラム自身が)カーネルモードで消費したCPU時間
cusrとcsysはそのプログラムから起動された子プロセスが消費した分
最後のx.xx CPUはそれらの合計。

実時間は他のプログラムが動いていたり、IOの待ちがあったりすると
かなり変動する。
0176nobodyさん04/06/06 21:49ID:???
>>174 ついでに有効桁も学習しとけよ
0177nobodyさん04/06/06 22:43ID:???
糞の>>160のはいなくなったか。
二度と来るなよ。 ( ゚д゚)、ペッ
0178nobodyさん04/06/06 23:24ID:ZCQZgjkY
ほっ、俺じゃなかった。
0179nobodyさん04/06/06 23:33ID:???
>>178
で、理解できたのか?
0180nobodyさん04/06/06 23:42ID:???
>>164
S-JISで書いていないんじゃないのか?
0181nobodyさん04/06/06 23:47ID:???
>>179
もう一回参考書読んできます。
いまいちファイルハンドルの意味自体わかってない気がするので。
0182nobodyさん04/06/06 23:53ID:???
>>181
ファイルハンドルはどうでもいいんだけど、最初の「if文で再度同じ事をしてる」は
書き方がヘタなだけだろう。
0183nobodyさん04/06/06 23:56ID:???
>>182
あのスクリプト自身があまりうまく出来てないと言うことですかね、
と言うことは私の疑問もあってるんでしょうか。
一応参考書の例文なのですが。
0184nobodyさん04/06/07 00:05ID:???
参考書じゃああいう書き方で説明することはあるのかもな。

疑問とは?

>$noって=$filenameですよね?
これか?違う

>print "$no"; がhtmlへの書き込みを示してて、
これか?違う

>print FP $no; がcount.txtへの書き込みという事ですか?
これか?そう
0185nobodyさん04/06/07 00:49ID:T5+evT2p
3万個ほどファイルがあるディレクトリを開いて、readdirでリストを取得すると、
数十〜数百個ほど取りこぼしがあるのですが、これって既出ですか?

もしそうならすいません。確実に取得できる方法はありますか?

ファイル名でソートしてちゃんと時系列で処理をしたいのですが、この問題のために
作れなくて困っています。
0186nobodyさん04/06/07 00:59ID:???
>>185
そのコードを見てみたいものだな。
0187nobodyさん04/06/07 01:04ID:???
>>184
1個目、2個目なのですがまず1個目は
$filenameから読み込んだ数値を$noとするということでしょうか?
2個目だけはどうしても必要とは思えないのですが。
その後、ifで再度書き込まれるわけですし。
0188nobodyさん04/06/07 01:13ID:???
>>185
これに引っかかってる?
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#file
0189nobodyさん04/06/07 01:36ID:???
>>187
>$filenameから読み込んだ数値を$noとする
そう。ファイルハンドルをスカラ変数に代入は1行読み込み。

>2個目
print "$no"; は標準出力へ$noの値を出力。
print FP $no; はファイルへ$noの値を出力(書き込み)。

必要あるなしなんて書いたやつがそうしたかったのだろうよ。
0190nobodyさん04/06/07 01:39ID:???
>>187
名前に元質問のレス番を入れろ。
コーディングスレなんだから「私の疑問も・・・」とか「1個目、2個目」なんて
書かずにどのコードについてなんなのかもうちょっと文章を考えて書け。
0191nobodyさん04/06/07 04:40ID:???
ものすごく基礎的な事なんですけど……。
どこがおかしい、もしくは基本的に間違いと言う所をご指摘願います。

#行数・項目数(, 区切り)とも不確定のCSVファイルを読み込み、
#@page2 に $page[n行目][n項目] と言った感じの2次元配列で格納したい

open (IN, "./link.csv");
my @page = (<IN>);
close (IN);

my (@line, $i, @page2);
$i = 0;
foreach (@page){
@{$line[$i]} = split(/,/);
push(@page2, @line);
}
print $page2[3];

#@page2 の中の3行目を表示したいけど、結果は ARRAY(0x155c7c8) と出る
#$page[3][3] とすると、最後の行の目標項目が表示される
0192nobodyさん04/06/07 05:02ID:???
>>164
しっかりファイル頭でuse宣言してる?
0193nobodyさん04/06/07 05:53ID:???
>>191
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldsc.html
019419104/06/07 06:53ID:???
>>193
ありがとうございます。
まさに知りたかった事が載ってました。
ここ読んで、やり直してみます。
0195nobodyさん04/06/07 08:45ID:mlYstQXa
>>175さん
ありがとうございました。

>>176
有効桁は・・・昔BASICをやってたときに#をつけると倍精度とか・・・
(よくわかってないんで自分で調べてみます)
019616404/06/07 12:47ID:c3dnKsSQ
>>180 >>192
ようやく解決できました。

>>165 のように書いてしまっていたので、指摘の通り、
「use encoding 'shift_jis';」をまずはじめに書くように直しました。

なおかつ、それでも化けていたのですが、
「use encoding 'shift_jis';」に「Filter=>1」を加えたところ、
ようやくきちんと「にほんご」と表示できました。
どうもです。
0197nobodyさん04/06/07 13:27ID:???
質問です。
サブルーチンの呼び方に関してなのですが、例えばjcodeですと
jcode'convert (*value, "sjis");  ← Perl4
jcode::convert (\$value, "sjis");  ← Perl5
などの書き方ができますよね。
Perl5ならどちらの記述でも動きますが、
Perl4にも対応させるなどの汎用性という面では、
常にPerl4の記述で書いたほうがいいのでしょうか?
0198nobodyさん04/06/07 13:39ID:???
使わなきゃいいじゃん。

↑ >>197がいいこと言った!
0199nobodyさん04/06/07 13:49ID:???
CGIとして配布するならともかく、
わざわざ古い書式を使うこともあるまい。
0200nobodyさん04/06/07 13:50ID:???
>>197
君が赤ラクダを持っているならともかく、今時 Perl4 で
問題なく動くスクリプトを書く方が難しいと思うがな。

jcode'convert(*value, "sjis"); # ×
&jcode'convert(*value, "sjis"); # ○

ま、自己満足以外のメリットは殆どないが、やりたきゃご自由に。
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html
0201nobodyさん04/06/07 14:25ID:???
赤ラクダのヨブの話は好きだったんだが
あれを Perl5.8 対応にしてヨブが粘土板を UTF-8 で刻むようなチュートリアルが読みたい
0202nobodyさん04/06/07 17:08ID:SF6UmQvx
This is perl, v5.8.0 built for i386-linux-thread-multi です。
あるデレクトリのテキストファイルのみを取得したいのですが、

opendir DIR, '/home/foo/bar' or die;
@files = grep { -f }readdir DIR;
print join("\n", @files);

とすると空でなにも表示されません。2行目を

@files = grep { !-d }readdir DIR; # デレクトリではないもの

とするとデレクトリ以外のファイルが取得できます。
ファイルテスト演算子「-f」では取得できないのですか?
0203nobodyさん04/06/07 17:45ID:???
>>202
readdir で得られるファイル名はフルパスでないからぢゃよ
020420204/06/07 17:51ID:SF6UmQvx
>>203
返事、ありがとうございます。
そうかとも思ったんですが、ならば !-d で判定できているのは…んん?

えーとあれですかね、この場合判定できているのではなくて、
存在しない->よって「!-d」も真値が返ってきてる、って事ですか?
つまり判定できているわけではないってこと?
020520204/06/07 17:54ID:SF6UmQvx
>>204
すいません、フルパスで -f で大丈夫でした。
お騒がせしました。
0206nobodyさん04/06/07 20:46ID:UI3v3779
スレ違ったので移動

掲示板CGIにアクセス解析CGIを組み込みたいと思ってます。
Bodyの中にタグとして書き出すのでなく、CGIの中で完結させたい
(ソースを見てもわからないようにしたい)のですが、
具体的にどのようにすればいいのでしょうか。
サブルーチンで解析CGIを呼び出す、というヒントは読んだのですが
呼び出しの記述の仕方がわかりません。
なんとなくこんなふう書くのではないかと思うのですが↓

sub access {
  ??? = './acc/acc.cgi?a=b&&c=d';
}

どなたかアドヴァイスおねがいできませんか!
0207nobodyさん04/06/07 20:55ID:???
>>206
改造スレで見てもらったほうがいいよ。
0208nobodyさん04/06/07 20:59ID:???
検索したほうがいいよ
0209nobodyさん04/06/07 21:02ID:SF6UmQvx
あるcommand があり、
system("/home/hoge/bin/command arg > file");
とするとcommand の出力はfileに書き出されます。

@array = system("/home/hoge/bin/command arg");
としても@arrayには何も格納されません。

シェルから
$ /home/hoge/bin/command arg
とすると出力が画面に表示されます。

command の仕様には「標準出力に表示します」とあるだけです。

訳あってこれ以上の情報が取得できない状況です。

command の出力を変数に取り込むにはどうすればいいんでしょうか。
0210nobodyさん04/06/07 21:02ID:???
一つ言えるのは掲示板なんぞに解析し込む馬鹿はキモイ。
ついでにプログラミングは100年は早い。
021120604/06/07 21:08ID:???
>>207
ありがとう、そうします。
0212nobodyさん04/06/07 21:14ID:???
>>208
アクセス解析 掲示板cgiに 埋め込む

などでは検索しましたが・・・
何かいい検索ワードあったら教えてください。
0213nobodyさん04/06/07 21:16ID:???
一つ言えるのは掲示板なんぞに解析し込む馬鹿はキモイ。
ついでにプログラミングは100年は早い。
おまけに日本語を喋れない。
0214nobodyさん04/06/07 21:29ID:???
>>209
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq8.html#Why_can_t_I_get_the_output_of_a_
021520904/06/07 21:32ID:???
>>214
@array = `/home/hoge/bin/command arg`;
なんですね。
ありがとうございました。
0216nobodyさん04/06/08 01:10ID:???
ちょっとお聞きしたいのですが、
例えば

@data = 1 2 3 4 5 〜 100

があり その中のある数にもっとも近いモノからソートすると言う事は出来るでしょうか?
例えば↑の配列 5 に一番近い数字からソートすると 4 6 が先頭の並び順になる…というような感じなんですが…。
ちょっと無理っぽいような気もするのですが可能ならば何卒お教え下さいませ。
0217nobodyさん04/06/08 01:36ID:???
absでワンクッション挟め
0218nobodyさん04/06/08 01:47ID:???
>>216
> 5 に一番近い数字からソートすると 4 6 が先頭
どっちなんだよ?

@new = sort(grep($_ >= 5, @data));

5を好きなように変えれば?
0219nobodyさん04/06/08 06:03ID:???
>>216
@data = sort{ abs($a-5) <=> abs($b-5) } @data;
0220nobodyさん04/06/08 14:30ID:???
perlのcrypt関数でパスワードをcryptし、

user(add|mod) -p 暗号化パスワード -s /bin/true -d /home/www/アカウント アカウント

でユーザの追加、変更を行っているのですが、例えば、「test」というパスワードを設定
すると、「test」でも「test999」でも「test48278467276484」でもFTPで認証できてしまい
ます。つまり、「test*」で認証できてしまいます。
「test」をusermodで「test876」にしても、上記同様関係なく「test*」で認証できて
しまいます。

デフォルトで用意されている「admin」というアカウントではこのような症状にはなら
ないので、どうもuseradd|mod側で使っている「-p」の暗号化したパスワードが怪しいの
ですが、解決に結びつかず、1日が経過してしまいました。

もしも何か解決策がありましたら、どうかご教授ください。
0221nobodyさん04/06/08 15:41ID:???
>>220
OSはなによ?
デフォのcrypt関数ならそれで正常。
0222nobodyさん04/06/08 15:52ID:???
>>220
8文字以降無視ってのはよくきくしそういう仕様だけど、
4文字でだめってのは初耳だ。
0223nobodyさん04/06/08 16:04ID:???
ほっとけよ。
perlに関係ないことだ。
0224nobodyさん04/06/08 17:13ID:???
>>221
普通cryptは先頭8文字だが
0225nobodyさん04/06/08 17:50ID:???
ディレクトリを無理やり削除するには
system ("|rm -r $dir");
で桶ですか?
0226nobodyさん04/06/08 18:10ID:???
-rf
022722004/06/08 18:48ID:???
皆様、ご返答有難うございます。
現在も模索中でございます。

>>221
Redhat9です。

>>222
「testtest」と設定しても、testtest*になって
しまうようです、、、
0228nobodyさん04/06/08 19:02ID:???
数字と英文字混ぜてテストしてみたか?
0229nobodyさん04/06/08 20:17ID:???
>「testtest」と設定しても、testtest*になって
>しまうようです、、、

とりあえずそれは正常だ。
023022004/06/09 02:55ID:???
>>228
「test123test」とやってみましたが、同じように「test123test*」
で認証できてしまいました。

>>229
正常なのですか?
はじめから用意されていた「admin」というアカウントでは、
このパスワード入力方法では通用しませんでした。
0231nobodyさん04/06/09 03:05ID:???
>>230
板違い。Linux板へ逝け。
0232206 04/06/09 06:49ID:siBsh0Gf
>>206 です
改造スレできいてみましたが、あちらでもスレ違いなのだそうです。
やはりここしかないのかと思います。
あちこち行ってますが、重複投稿でなく誘導ということでご容赦ください。

>>206のようにcgiでcgiを呼び出して使ってる方はいないでしょうか?
requireでもopen(<IN>, "**.cgi")でも駄目でした。
検索をしても、cgiのBody内に解析のタグを仕込む方法ばかり出てきてしまいます。
ヒントだけでもよいのでおねがいいたします。
023320604/06/09 06:59ID:???
ひょっとしてこんな簡単な話ではないのでしょうか・・?
0234nobodyさん04/06/09 07:00ID:???
だから無理だって言ってんだろうが。
0235nobodyさん04/06/09 07:45ID:???
>>220
crypt(3)よく読め
0236206 04/06/09 07:51ID:???
>>234
配布先のFAQには

>アクセスログの取得がばれるとまずいと言う場合は、なんとかPerlを勉強して、
>CGIの中からサブルーチンとしてアクセス解析を呼ぶなどの方法で対処して
>いただければと思います(ここまでくると手法としてはけっこう厄介ですが)。

と書いてあったんです・・・。
勉強して対処しろ、と書いてる人に具体的方法は聞けないと思い
私なりに調べたり試したりしましたが答えが出ませんでした。
0237nobodyさん04/06/09 07:58ID:???
>>236
しつこい。
二度と来るな。
0238nobodyさん04/06/09 08:54ID:???
>>236
どの方法を取るにしても、スクリプトを書き換えないと無理。

一番簡単な方法は、クエリ部分を引数(ARGV)で取るようにして、
``かqx//かsystemあたりで呼び出す。
分からなければ、Perlの入門書をどうぞ。
0239236 04/06/09 10:36ID:???
>>238
ありがとうございます。調べてみます!
0240nobodyさん04/06/09 11:04ID:???
お前ら優しすぎ
0241nobodyさん04/06/09 11:17ID:???
>>206
>>236

http://pc5.2ch.net/test/read.cgi/php/1049514428/528-529
0242nobodyさん04/06/09 13:31ID:???
優しくして得するのは優しくした方
0243nobodyさん04/06/09 14:24ID:???
親切は人の為ならずってか。

今回の対応が親切だろうか?
よーく考えてご覧。
むしろ自分の首をしめてるのが良く分かるだろう。
024422004/06/09 15:33ID:???
>>231
Linux板で板違いだと思ったのでこちらで質問させて
いただいたのですが、また板違いでしたか。
すみませんでした
0245nobodyさん04/06/09 16:06ID:jOx/oerj
2ちゃんねるは優しさの塊ですから。
0246nobodyさん04/06/09 16:12ID:???
バファリンより凄いじゃないですか!?
0247nobodyさん04/06/09 21:22ID:???
>>246
違う違う落ち着いてよく考えろって。
バファリンは2ちゃんねるを内包してるんだよ?
0248nobodyさん04/06/09 23:17ID:???
リファレンスをうまく使えるようになるたくて色々試してるんですが、クエリを標準入力から
もらって、一つの連想配列にキーと値にわけて収納するというのを、リファレンスでやりたい
んですが

@test = qw/sda-1we pj-odfao of-134t/;

foreach $a(@test){
($x,$y)=split('-',$a);
$form={$x,$y};
}

print %$form;
>of134t

当たり前の結果ですが上書きされて行って最後の代入結果だけ残ります。上書きさせずに
一度に$formの中に標準入力からのデータのリファレンスを作るのはどうやればいいでしょうか。

少し言葉が変かもしれないですがごめんなさい。
024924804/06/09 23:23ID:???
言い忘れてました。

$form{$x}=$y;
$ref=\%form;

以外でやりたいんです。なんかリファレンスを普通の変数のように作成したいと思いまして。
025024804/06/09 23:32ID:???
2回目まであげてしまってごめんなさい。

ところで、javascriptでは関数内でグローバル変数を使うなって言われますけど、
perlでもメソッド内であまりグローバル変数を使わないほうが良いんでしょうか?

リファレンスもローカル変数化するべきでしょうか?
0251nobodyさん04/06/09 23:32ID:iD3wLltH
こちらで聞くべきか悩みましたが・・・間違っていたらすいません。

http://yougo.ascii24.com/gh/search/

への用語検索をHP内に埋め込んでいるのですが、
ソースをEUCで記述すると、入力した言葉が文字化けして送られてしまいます。
何か良い解決策などは無いでしょうか?

ソースは、↓のように作っていて、JISで記述した場合は正常に動きました。

<FORM method="GET" action="http://yougo.ascii24.com/gh/search/"
<INPUT TYPE="text" name="pattern"><INPUT TYPE="submit" name="pattern">
</FORM>
0252nobodyさん04/06/09 23:33ID:???
$form = { map{ split /-/ } @test };
0253nobodyさん04/06/09 23:35ID:???
>>250
グローバル変数は基本的に使わないほうがいいんじゃ?
当然リファレンスも
あと、>>252は>>249にね

>>251
で?
025424804/06/09 23:55ID:???
>>252-253
ありがとうございます。あとから
@test2 = qw/q 1 w 2 e 3 r 4 t 5/;
をさっきの$formのりファレンスに追加したい場合もあるなと思って試してたら返事が遅くなりました。
まだできてませんけど;

メソッド内でのグローバル変数はやはり禁止にしたほうが何かといいですよね。
メソッド1での代入結果をメソッド2で使うんですが、リファレンスにしてそれだけ
呼び出し元にreturnで返そうと思います。(まだテストしてないので可能かはわかりませんんが・・・)

とにかくありがとうございました!
025525104/06/09 23:58ID:iD3wLltH
>>253
入力した値が、文字化けせずに日本語のまま、正常に送られるようにしたいのです。
わかりにくい日本語ですいません・・・
0256nobodyさん04/06/10 00:00ID:???
>>254
うん?よく意図が読み取れないけど、メソッドっていうなら、普通にメンバ変数?(間違った言葉使ってるかも)に代入すればいいだけじゃ?

sub method1{
  〜〜〜
  $self->{hogehoge} = "unko-";
  $self->method2();
}

sub method2{
  〜〜
  print $self->{hogehoge};
}

みたいに。
0257nobodyさん04/06/10 00:02ID:???
>>255
向こうがJISだったら、JISで送るしかないんじゃ?
<form>タグのencなんたらってのでこちらの送信するときの円コードは変えることができると思う。 ブラウザの挙動は知らないけど。
0258nobodyさん04/06/10 00:05ID:???
>>257 IEは無視するよ
>>251 いい加減板違い気付けよ
0259nobodyさん04/06/10 00:10ID:Zv7Yb66M
>>251
微妙にスレ違い。<form ... ACCEPTCHARSET="shift_jis">
026024804/06/10 00:10ID:???
sub method{

my @test1 = qw/q 1 w 2 e 3 r 4 t 5/;
my @test2 = qw/y 6 u 7 i 8 o 9 p 0/; #この行はまだ実験中なので無視してください。
my $form;
$form={map {split /-/}@test1};

return $form;

}

$form=&method;

print $form->{q};

一応動作はしますがなんか変な感じですね。

>>256
$selfは
my $self=shift;
とかをメソッドの初めにしてるということですよね?
今まで、うまくオブジェクト指向ちっくな部分が理解できてませんでしたけど、
なんかもの凄いヒントもらった気がします。ちょっと考えてみます。
0261nobodyさん04/06/10 00:18ID:???
>>260
うぬ? 微妙にわかってないかな。 my @test1 = qw/q 1 w 2 e 3 r 4 t 5/; なら、別に'-'でsplitする必要はないので、$form = { @test1 }でいいんじゃないかな。
あと、@array = qw/a A b B c C/; %hash = @array;と、
%hash = qw/a A b B c C/;で、%hashの中身は、同じね。

{}んで、囲んだたら中のリストの内容がぎじぇりgへおりgはえおじぇいrひあえhrがれがえrげhてぇt
ごめん、なにいってるわからなく。

>
026224804/06/10 00:27ID:???
>>261
splitの部分は途中で@test1の中身を変えてしまったままを忘れてました。

>あと、@array = qw/a A b B c C/; %hash = @array;と、
>%hash = qw/a A b B c C/;で、%hashの中身は、同じね。
なんとなくで思ってましたが>>261さんのおかげで、確信がもてました。

$self->{hogehoge}="文字列";
はリファレンスのアドレス?メモリ番号といいますか、それが決まる前に値を入れる・・・
というか、値を入れるのと同時にアドレスも持つみたいな感じを以前に読んだ気がします。

かなり良い感じになってきたので、解説サイト行って勉強しなおしてきます。今なら前より
理解できそう。
026325104/06/10 00:37ID:outd/ELT
>>259
ありがとうございます。しかし、その内容では駄目なようでした・・・
板違いスイマセンでした。この内容だとHTMLなのかな・・・?
026424804/06/10 09:53ID:???
sub method{
my $self = shift;
my @test1 = qw/a-9 b-67 c-876 d-765/;
my @test2 = qw/e-rt f-asdd g-fgf/;
$self->{form}={map {split /-/}@test1,map {split /-/}@test2};
}

sub method2{
my $self=shift;
my @test=qw/a b c d e f g/;
print map{$self->{form}{$_}@test;
}

$self->{form}をデリファレンスするのに今はこんなやり方しか思いつかないんですが、
method2でわざわざ@testに$self->{form}の各キーを代入しないでもいい方法はないでしょうか。

$$self{form}でもアドレスが出てくるので、$$$self{form}でいけるかなと思いましたがやはり
駄目でした。

0265nobodyさん04/06/10 10:01ID:???
>>264
keys %{$self->{form}}
026624804/06/10 10:09ID:???
>>265
!?ありがとうございました。%{$self->{form}}カーリーブレスつけると全部表示されるんですね。
026724804/06/10 11:41ID:???
メソッド内でのグローバル変数をなくそうと色々試してるんですが、基本的な考え方としては

(モジュールの場合)
コンストラクタ
sub new{
my $self = shift;
bless {
data1 => {qw/a 1 b 2 c 3/},
data2 => {qw/d 4 e 5 f 6/}
},$self;
}
で初期化しておいてmethodに$a={qw/a 2 b 4 c 6/}を投げたら
sub method{
my $self = shift;
my $a = shift;
$self->{data1}={%{$a}};
}
のように$self->の中身に処理結果を反映させて行く。みたいな感じでいいでしょうか?
これなら一応グローバル変数は排除できるっぽいです。



0268nobodyさん04/06/10 12:02ID:Niohn4Xp
ひと月分の予定表で質問です。
以下の様にして予定表のリストから名前と年月が一致した予定を配列に入れて
foreach $yotei(@yotei) {
chomp $yotei;
($yo_name,$yo_year,$yo_mon,$yo_day,$yo_kaisi,$yo_end,$yo_naiyou) = split(/<>/,$yotei);
if ($name eq $yo_name) {
if ($yo_year eq $year) {
if ($yo_mon eq $month) {
$h_yotei[$yo_day] = $yo_naiyou;
}
}
}
}

後で、次の様にして表示しているのですが、これだと1日に1件の内容しか表示できません。
for(my $i=1;$i<=$lastday;$i++){
print "<td>$h_yotei[$i]</td>\n";
}
1日に複数の内容を表示させるにはどのように変更すればいいでしょうか?
0269nobodyさん04/06/10 12:40ID:???
>>268
push @{$h_yotei[$yo_day]}, $yo_naiyo;
に変えて、
for(my $i=1;$i<=$lastday;$i++){
print "<td>$_</td>\n" foreach @{$h_yotei[$i]};
}
とかか?
なんかしっくりせんけど。
0270nobodyさん04/06/10 13:56ID:???
>>268
月の日数文のファイルをつくって、ファイル名はもちろん年月日とかで。

そんでifにかけて真ならファイルオープンして中身を表示とかは?
これなら新しく予定を書きこむのも、新しい日付分のファイルを作るのもperlで可能。
素人も使えるようにUIもperlで整えればいいのでは?
027127004/06/10 13:58ID:???
CSVにでもして、名前の検索は年月日該当のファイルを開けてからやるみたいな。
0272nobodyさん04/06/10 14:00ID:???
>>271
会社で使うならそれでもいいね。社員のその日の予定が社長は一覧できるし。
0273nobodyさん04/06/10 17:01ID:???
>>267
$self->{data1}={%{$a}};
これは、$aをデリファレンスして、んで、リファレンスを取ってるから、±0なことをしてると思うよ。
$aにハッシュのリファレンスが入ってるんだから、$self->{data1} = $a;でok

あと、この辺の話題になると、ム板のPerlスレにいったほうがいい。
0274nobodyさん04/06/10 17:35ID:???
>>273
ハッシュのコピーをしてるんじゃないの?

こうじゃなくて

$self->{data1} = \%{$a};

ならたしかにお前のいうとおりだが。
■ このスレッドは過去ログ倉庫に格納されています