Perl コーディング初心者質問コーナー Part33
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
04/03/01 02:46ID:1GeWO7LH【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0910908
04/04/04 16:18ID:???0911nobodyさん
04/04/04 16:29ID:???ちゃんとそのページを読みましょう。
とくに「FTP クライアントはクライアント兼サーバ」の部分を
理解していますか?
ファイル名を指定しても勝手にファイルが送られるわけじゃありません。
肝心のデータの受け渡し部分(DATA_WAITINGによる通信)がごっそり抜けてます。
そもそも、STOR で指定するファイル名はサーバ側で保存するための
ファイル名でローカルのファイル名じゃないです。
ttp://x68000.startshop.co.jp/~68user/net/ftp-5.html
までしっかり読んで理解するべきでしょう。
これ以上は FTP プロトコルの話になるので、コーディングスレだとスレ違いと
言われるような気がします。
0912908
04/04/04 16:36ID:???0913nobodyさん
04/04/04 17:17ID:???一週目の日曜と月曜朝三時までは前の週になるので[0]になっているので
これを[1]にするとか前の月にするとかしたらいいだけ
0915nobodyさん
04/04/04 18:25ID:???> $weekth = int($mday / 7);
ここを
$weekth = int(($mday-1+($wday-($mday-1)%7)%7)/7);
> $weekth = 1 if($mday == 1);
ここを
$weekth = 1 unless($weekth); # 一週目月曜日午前三時以前の対策
0916908
04/04/04 18:26ID:???またまたお助けを。
$weekth = 1 if($mday == 1); を以下のように書き換え。
if($weekth < 1) #第0週 = 前月最終週
{
$weekth = 5; #第五週=28日から31日
if(--$month < 1) #0月=前年最終月
{
$year--; $month=12;
}
}
0918nobodyさん
04/04/04 18:30ID:???Internal Server Error なんていう原因の特定もできないメッセージじゃなくて、
ちゃんとPerlの出すエラーメッセージを読むべし。
0919nobodyさん
04/04/04 18:32ID:???とりあえず、x月1日が月曜日である場合の午前3時までの処理が曖昧だが。
とりあえず前月最終日扱いとしてあんまり自信がないがこんな感じ。
$time = time;
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time);
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($time-24*60*60) if ($hour < 3); # 午前3時前は前日扱い
$mday += 12 - (($mday +6 -$wday) % 7); # 第1日曜が 13 になるよう補正
$weekth = int($mday/7);
$mon = sprintf("%02d", $mon+1);
$year += 1900;
print "Location: $uri$year$mon$weekth.html\n\n";
>>913
>これを[1]にするとか
これやると第1週が7日以上になるわけで。
0920nobodyさん
04/04/04 18:41ID:???>>916
コピペして全角空白が入ってるに 1 票。
>>913
>>919 を補足しとく。
×これやると第1週が7日以上になるわけで。
○これやると第1週が8日以上になるわけで。
そもそも、>>909 のコードでも 4/1 は第 1 週になってたと思われるので、
ことはそう単純ではないのです。
0921908
04/04/04 18:44ID:???すみません、エラーメッセージの出し方がわからなくて。
ちょっとググってみましたが、わかんらなくて。
>>919
ありがとうございます。これも試させていただきます。
とりあえず>>915さんのようにしたら、今のところ普通に動いてます。
いろいろとアドバイスをいただけて、大変ありがたいんですが、
最終的にどうするのがベストなのかわからなくなってしまいました。
0922908
04/04/04 19:02ID:???これは元のファイルの$uriの下の行〜printまでを置き換えればいいんですよね?
どうもエラーになってしまいます。
>>920
おっしゃるとおり全角スペースでした。で、動いたんですが、
なぜか2003045.htmlに飛んでしまいました。
0923nobodyさん
04/04/04 19:04ID:???my $uri = 'http://www.hoge.com/';
my ($hour, $mday, $mon, $year, $wday) = (localtime(time()-60*60*27))[2..6];
my $weekth = int(($mday-1+($wday-($mday-1)%7)%7)/7);
printf("Location: %s%04d%02d%1d.html\n\n", $uri, $year+1900, $mon+1, $weekth+1);
exit;
# 一週目月曜日午前三時以前は前の週に入れる場合。
0924923
04/04/04 19:07ID:???URIの例示には、rfc2606に従いhttp://www.example.com/等を使いませう。
0925908
04/04/04 19:12ID:???ありがとうございます。これまたエラーになってしまいました。
なんででしょう?
どうしたらいいかますますわかんなくなってきました。
今のところ、最初のものを>>915さん修正したものが正常に動作しているので
それを使わせてもらおうと思ってます。
0926919, 920
04/04/04 19:15ID:???違った。日数の問題じゃないや。
各週の日曜で後戻りしておかしくなるので 1 箇所だけ対応しても駄目ってことね。
>>921
> すみません、エラーメッセージの出し方がわからなくて。
ぐぐってみた。
↓「evalとdieを使って例外処理をしよう」
ttp://www.mellowtone.org/perltip1.html
> 最終的にどうするのがベストなのかわからなくなってしまいました。
んー、別に正しく動くならどれ使ってもいいと思うけど、
> とりあえず>>915さんのようにしたら、今のところ普通に動いてます。
今日だけ、じゃなくて自分の望む挙動かいろんなパターンで確認しておくべきだと思う。
1 日が日曜の場合に、1 日も 2 日も第 1 週になってるっぽいけど?
>>922
>これは元のファイルの$uriの下の行〜printまでを置き換えればいいんですよね?
そう。Perl の吐くエラーが欲しいところ。
とりあえず↑やるか、ローカルにも Perl 入れてそこで試してみない?
あと、>>916 のコードは多分おまいさんの望む挙動をしない。
0927nobodyさん
04/04/04 19:16ID:???エラーの理由が全角スペースとかだったとしたら、アドバイスくれた人に失礼だよ。
0928nobodyさん
04/04/04 19:31ID:???0929nobodyさん
04/04/04 19:34ID:???0930908
04/04/04 19:40ID:???会社の鯖でやってます、ごめんなさい。
Macなんですが、ローカルに入れるというのがわからなくて。
実はHTMLさえもそんなに知らない状態です。
0931908
04/04/04 19:52ID:???動きました。本当に失礼しました。
原因は、MacOSXで半角のエンマークがバックスラッシュに化けることがあって
それをそのまま最後の行でコピペしていたためでした。
本当に申し訳ありませんでした。
仕事関係のアドレスでここには晒せないのですが、きちんとお礼をいい、
どこで使っているのか報告したいので、
>>926さん、よろしければメールください。
本当にありがとうございました。
0932nobodyさん
04/04/04 19:54ID:???管理者からゴルァされる前にさっさとやめたほうがいいよ。
ていうか、ローカルでの動かし方も分からん奴がCGIに手を出すんじゃない。
0934919=920=926
04/04/04 20:09ID:???こりゃどうもご丁寧に。
一応 >>923 をぱくりつつ最終版をさらしてみるよ。
#!/usr/bin/perl
my $uri = 'http://example.com/';
my ($mday, $mon, $year, $wday) = (localtime(time() - 3*60*60))[3..6];
my $week = int(($mday+12-(($mday+6-$wday)%7))/7);
printf "Location: %s%04d%02d%1d.html\n\n", $uri, $year+1900, $mon+1, $week;
>>932 は確かに正論だし、今回はネタが面白そうだったからやってみたけど
本来は↓のスレの方がふさわしいかもね。
【 スクリプト改造依頼スレ 】(丸投げ)
ttp://pc5.2ch.net/test/read.cgi/php/1076831972/
0935885
04/04/04 20:27ID:???無事できました。どうもです。
引き続き質問すいません。
以下の書き方、まちがってます? エラーはでないんですが
画像が全部に表示されてしまう・・。
if ($n == 55) {$icon = 1 ;}
else {$icon = 0 ;}
この間にprintで文字記述後。
if ($icon = 1) {print "<IMG src=\"./img/icon.gif\">" ;}
else {print " " ;}
0937935
04/04/04 20:32ID:???すいません。ほんとーですね。
申し訳なさ杉です。
(´Д`)
0938nobodyさん
04/04/04 20:32ID:???$icon == 1 が正解。
$icon = 1 では、1を代入してそれを評価してしまう。(1なので必ず真になる)
もうちょい基礎をしっかりな。
0939935
04/04/05 00:27ID:???0940nobodyさん
04/04/05 00:29ID:???0941935
04/04/05 00:30ID:???0942本物935
04/04/05 01:05ID:???煽りどぉもです。
いや、まじで単純にミスってました。
936・938さん、感謝です。
(´Д`)ウヘェ・・
0944935
04/04/05 03:23ID:???つーか、インタプリタは糞
これ、周知の事実ね
0946nobodyさん
04/04/05 15:42ID:???0947nobodyさん
04/04/05 15:42ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。