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

【Perl】初心者コーナーPart9

レス数が1000を超えています。これ以上書き込みはできません。
0001名無しさん@お腹いっぱい。01/12/28 23:21ID:SPLRvqQi
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
0978名無しさん@お腹いっぱい。02/02/24 20:54ID:???
質問です.
バイナリとして読み込んだテキストファイルを処理して出来た文字列があります.
この文字列の末尾の改行を取り去りたい場合,
s/\x0D?\x0A?$// とする以外無いのでしょうか.
chompはどうも\x0Aしか消してくれないみたいなので,
改行コードが\x0D\x0Aだった場合は\x0Aのみが消されて\x0Dが残ってしまいます.

s/\x0D?\x0A?$// より良い方法があればご教示ください.
OSはWindows2000,PerlはActivePerlとPerl for Cygwinを使っています.

$_ = "str\x0D\x0A\x0D\x0A";
open(OUT_BIN, "> ./out_bin.txt") or die;
binmode(OUT_BIN);
chomp;
print OUT_BIN;
close(OUT_BIN);
0979名無しさん@お腹いっぱい。02/02/24 20:56ID:???
>978
binmodeをコメントアウトしたらうまくいかない?
0980名無しさん@お腹いっぱい。02/02/24 20:57ID:???
>>978
substr($data,length($data)-2,2):
0981名無しさん@お腹いっぱい。02/02/24 21:19ID:???
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |   次スレ立てて!!  .|
 |_________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ
098297802/02/24 21:32ID:???
即レスどもです.

>>979
混乱させてしまったようで申し訳ありません.
テキストとして出力すると出力時に\x0A→\x0D\x0Aの変換がされてしまうので,
結果がわかりやすいようにサンプルコードではbinmodeしておきました.

実際にやりたい事を書いておきます.大崎氏の
「ファイルの最後の数行だけ表示する(http://www.din.or.jp/~ohzaki/perl.htm#File_Tail)」
を改造して「ファイルの最後の数行を『逆順に取り出す』」スクリプトを作っているのです.
取り出すところまでは書けたのですが,取り出した行の改行コードがchompでは取れない.
そこで質問したというわけです.


>>980
どもです.しかし一応改行が\x0D\x0Aでない場合(\x0Aとか)も考えておきたいのです.
0983名無しさん@お腹いっぱい。02/02/24 21:42ID:???
>>978
DOS改行が入力される可能性がある場合は、>>978の通りにやってます。
s/\r?\n$//;
こんなかんじー。
0984名無しさん@お腹いっぱい。02/02/24 21:59ID:???
1 0 0 0 ま で 平 然 と 質 疑 応 答 が 繰 り 返 さ れ る ス レ を 目 指 そ う ょ
0985名無しさん@お腹いっぱい。02/02/24 22:22ID:???
次スレ建てちゃった。
【Perl】初心者コーナーPart10
http://pc.2ch.net/test/read.cgi/php/1014556702/
0986名無しさん@お腹いっぱい。02/02/24 22:29ID:???
>985
お気に入りに入れて移動しマスです。。。。
098797802/02/24 22:29ID:???
>>983
ありがとうございます.一応支障は無いので私もこのままいく事にします.
答えてくれたみなさん,どーもです.

>>985
乙カレー.
098897802/02/25 00:31ID:???
うわ,つーかPerlメモの「改行コードを削除する」にしっかり書いてあった…….
お騒がせしてすまんかった.抜けてるなー,おれ.
0989名無しさん@お腹いっぱい。02/02/25 12:34ID:xTyCNQEK
つかぬことをお伺いします。
既にログに記録されている数桁の文字列を、
出力時にカンマやピリオドで区切ることは可能なのでしょうか?

例えば
"19800"とログに記録されているものを19,800として出力、
或いは
"20020224"とログ記録されているものを2002.02.24として出力、

いかがでしょうか、
もし可能でしたら方法を教えてもらえると大変助かります。
0990名無しさん@お腹いっぱい。02/02/25 13:00ID:???
>989
>>3のリンク先の
http://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
ここにカンマ区切りのことが書いてある。

日付の方は
$day =~ s/(\d{4})(\d{2})(\d{2})/$1\.$2\.$3/;
でいいだろ。
0991名無しさん@お腹いっぱい。02/02/25 13:07ID:ZVFFw9ik
1 while ($str =~ s/^(\d+)(\d{3})/$1,$2/);
で、数字にコンマをつけます
099298902/02/25 16:29ID:xTyCNQEK
ありがとうございます。>990さん、991さん
望んでいたとおりの完璧に動きを得ることができました!
0993出来の悪い子02/02/25 17:11ID:KjItHBP9
出来の良いお前らに質問です

cgiにプルダウンでパラメータを渡そうとしています
XXX.cgi?year=2002&month=02&day=25
という形にはなったのですが
cgi側が吐き出す結果$Todayは -- という形になります

$day = $in{"day"};
$month = $in{"month"};
$year = $in{"year"};
$Today = $year . "-" . $month . "-" . $day;
print $Today

どこらへんの記述を見直せば良いでしょうか?
ヒントよろしくお願い致します。
0994名無しさん@お腹いっぱい。02/02/25 17:18ID:???
>993
このへんかな?

>出来の良いお前らに質問です
0995名無しさん@お腹いっぱい。02/02/25 17:19ID:???
>993
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$in{$key} = $value;
}

この辺。
肝心な部分が載ってねーじゃねーか。
だから出来が悪いって言われるんだ。
改善を要求しる!
0996名無しさん@お腹いっぱい。02/02/25 17:21ID:???
ふが
0997名無しさん@お腹いっぱい。02/02/25 17:22ID:???
ほんとにできがいいなー
0998名無しさん@お腹いっぱい。02/02/25 17:22ID:???
。。。。。
0999名無しさん@お腹いっぱい。02/02/25 17:23ID:???
あ
1000名無しさん@お腹いっぱい。02/02/25 17:23ID:???
       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       | 1000
   ∧ ∧ |/\_________
   (,,゚Д゚)____.
   (つ/~ ※ ※ \
   /※ ※ ※ ※ \
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。