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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0002nobodyさん04/03/01 02:49ID:1GeWO7LH
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc2.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ)
http://pc2.2ch.net/test/read.cgi/php/1076831972/
△▲ WebProg 初心者の質問 Part7 ▼▽
http://pc2.2ch.net/test/read.cgi/php/1073460282/
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc2.2ch.net/test/read.cgi/php/1034645635/
【Perl】掲示板を使ろう!
http://pc2.2ch.net/test/read.cgi/php/988890976/
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
0003nobodyさん04/03/01 02:49ID:1GeWO7LH
[過去ログ] 1 of 2

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 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0004nobodyさん04/03/01 02:50ID:1GeWO7LH
[過去ログ] 2 of 2

Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc2.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc2.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc2.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc2.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc2.2ch.net/test/read.cgi/php/1069846177/
part31 http://pc2.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc2.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記) 前スレ

[ひまぢん氏のミラー]
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
0005nobodyさん04/03/01 02:51ID:1GeWO7LH
[総合]
 ・http://www.excite.co.jp/world/ # 英文のページ多いから一応
 ・Perl Com: http://www.perl.com/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/ # 死んでるか?
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0006nobodyさん04/03/01 02:53ID:1GeWO7LH
 [Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/
0007nobodyさん04/03/01 03:36ID:???
前スレはけっこうキレイに終わりましたね。
0008nobodyさん04/03/01 04:21ID:???
今年もよろしく
0009nobodyさん04/03/01 04:45ID:???
今月もよろしく
0010nobodyさん04/03/01 09:06ID:???
今週もよろしく
0011nobodyさん04/03/01 11:13ID:???
今日もよろしく
0012nobodyさん04/03/01 15:07ID:OuFmXd5y
質問です。
現在GIFカウンタ作っています。
QUERY_STRINGの値で、昨日・今日・合計の三つの数値のどれを呼び出すかを決めています。
例えば<img src="counter.cgi?total">と書けば、カウントが1増えた合計値が表示されるのはいいのですが、
<img src="counter.cgi?total"><img src="counter.cgi?today">などと書いた場合、
?totalで+1された後に、さらに?todayで+1されてしまい、カウントが2つ上がってしまいます。
どのような記述をすれば回避できますでしょうか?
0013nobodyさん04/03/01 15:55ID:???
また糞スレ盾やガッ他・・・
0014nobodyさん04/03/01 15:58ID:???
Perlをかけない>>13がいるスレはここですか?
0015nobodyさん04/03/01 16:32ID:???
>>12
Todayがカウントアップする時にTotalもカウントアップするのは問題ないのでは。
Totalが+1でTodayが+2とか言うのは問題だが。
0016nobodyさん04/03/01 17:10ID:???
>>12
1:全部セットで使うと決めて、Total(today)でのみカウントアップにする
2:アドレスでカウントアップを制限する
0017nobodyさん04/03/01 17:18ID:???
>>12です。

>>15氏
お言葉有難うございます。
totalのみを表示するときには、totalがカウントアップするときにはtodayもきちんとカウントアップします。
また、todayのみを表示するときには、todayがカウントアップするときにはtotalもきちんとカウントアップします。
問題となっている点は、今日と合計のアクセスを表示する場合、
<img src="counter.cgi?today"><img src="counter.cgi?total">
と記述しているのですが、二回CGIを呼び出すため、カウントが2つ回ってしまうということです。

例えば、合計カウントが1000、今日のカウントが200の場合、
<img src="counter.cgi?today"> だけならば、合計1001、今日201となります。
同じく、<img src="counter.cgi?total"> だけならば、合計1001、今日201となります。

しかし、
<img src="counter.cgi?today"><img src="counter.cgi?total">
このように両方呼び出した場合、
1つめのCGIの呼び出しで合計1001、今日201となり、表示するのは201なのですが、
totalの値を呼ぶ際にもう一度CGIを呼ぶことによって合計1002、今日202となり、合計の表示が1002となってしまうのです。

ロジックの問題なので、WebProg 初心者の質問 Part7に行ったほうがいいですかね。
0018nobodyさん04/03/01 17:21ID:???
連稿失礼します。

>>16氏
>1:全部セットで使うと決めて、Total(today)でのみカウントアップにする
やはりこの方式が一番手っ取り早いでしょうか。
そちらのやり方も検討してみます。
わざわざレス有難うございました。
0019nobodyさん04/03/01 18:07ID:???
Perlで短くかつバカなプログラムを書いてください。↓どうぞ
0020nobodyさん04/03/01 18:46ID:???
>>12
ワラタ
0021nobodyさん04/03/01 19:07ID:???
>>12
おもろいネタだな
0022nobodyさん04/03/01 19:47ID:???
print qq(↓の数字で俺の運命が決まる!<br>\n);
printf qq(%d<br>\n), int(rand $#Life);
my @Life = qw(溺死 焼死 轢死 凍死 瀕死
田中麗奈と恋人になる 田中麗奈と結婚 田中麗奈とSEX SEX後に腹上死 SEXなんて永遠に出来ず孤独死);

my $count = 0;
foreach (@Life){
 printf qq(%d %s<br>\n), $count++, $_;
}

これでどうだ。
00232204/03/01 19:48ID:???
ブフー!流石に見直し無しで書いたら酷い間違い方だな。
まぁいいや。俺は4、5、6です。
0024nobodyさん04/03/01 20:10ID:???
半角数字0〜9を全角数字0〜9に変換したいんですがどうやるといいんでしょうか。
具体的には、変数に任意の数が入っていて、それを全角にしたいんです。
$data = 1234;
としてここで何か処理をして
$dataの値を"1234"としたいわけです。

自分では
$data =~ s/0/0/g;
$data =~ s/1/1/g;
 :
 :
$data =~ s/8/8/g;
$data =~ s/9/9/g;
というのを考えたんですがもっとうまい書き方はないかと思い質問してみました。
00252204/03/01 20:14ID:???
>>24
ttp://tohoho.wakusei.ne.jp/lng/199911/99110327.htm
こんな感じで検索。
http://www.google.co.jp/search?q=Perl+%E5%85%A8%E8%A7%92%E6%96%87%E5%AD%97+%E5%A4%89%E6%8F%9B&sourceid=opera&num=0&ie=utf-8&oe=utf-8
0026未承諾広告※ ◆TWARamEjuA 04/03/01 21:11ID:???
$data =~ s/\G(\d)/('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')[$1]/eg; # (w
0027nobodyさん04/03/01 21:19ID:???
>>17

一定期間内において同一IPからのカウントアップ要求が
ダブらないようなチェックルーチンを入れればいいだけなんじゃ?
0028nobodyさん04/03/01 21:20ID:???
>>24

phpだと専用の関数がある。
0029nobodyさん04/03/01 21:31ID:???
いろいろやってみましたがどういう処理にしたら上手くいくのか分からないので
質問させてください。

「hoge.log」というファイルがあり中身は

3212421321,ほげ,1543443246,ほげ,ほげ
.
.
.
.
3546754134,ほげ,3224654724,ほげ,ほげ
2346567945,ほげ,6735432758,ほげ,ほげ
.
.
.
.
となっています。

つまり、[ランダムな10桁の整数],ほげ,[ランダムな10桁の整数],ほげ,ほげ
って感じのが改行されていっぱいあると思ってください。データはコンマ区切り。

そこで、サブルーチンで引数1「3546754134」と引数2「1234567890」を渡して、
引数1とマッチする行をhoge.logの先頭の行に持ってきて、さらに先頭に持ってきた
行の三番目のランダムな10桁引数2に置換したいのです。

ご理解いただけるでしょうか。
だれかエライ人明解なコードを教えてください。
00302904/03/01 21:34ID:???
日本語が意味不明でした。

訂正
#
そこで、サブルーチンに引数1「3546754134」と引数2「1234567890」を渡して、
引数1とマッチする行をhoge.logの先頭の行に持ってくる。

さらに先頭に持ってきた行の三番目の区切りの「ランダムな10桁の整数」を
引数2に置換したいのです。
#
0031nobodyさん04/03/01 22:04ID:???
sub hoge{
my($line,@line);
open(IN, "+<hoge");
while (<IN>){
/^$_[0],/o and ($line= $_,last) or push(@line, $_);
}
seek(IN, 0, 0);
$line=~ s/,\d{10},/$_[1]/;
print IN $line,@line;
close(IN);
}
00323104/03/01 22:06ID:???
間違ってた 試してないけど

sub hoge{
my($line,@line);
open(RW, "+<filename");
while (<RW>){
/^$_[0],/o and ($line= $_,last) or push(@line, $_);
}
seek(RW, 0, 0);
$line=~ s/,\d{10},/,$_[1],/;
print RW $line,@line;
close(RW);
}
00332904/03/01 22:23ID:???
>>31氏
すごい・・・。perl初めて一週間なのですが私にはこのような考え方は
一生生まれないのだろうな。配列の使い方ってこんな風に使えるのですね。
いっぱいコード書いて、たくさん練習します。

ちなみにまだよく>>31氏のコードを理解できてません。一生懸命徹夜で理解してみます。
なんでか知らないけど、思うように動いてしまった。
そんな感じの空虚さが頭でグルグル回ってます。あと何年勉強したらこういう
コードがすぐに書けるようになるのだろうか。がんばります。

#私はCの知識もなければperlがはじめての言語なので、プログラムの感覚も
泡を握っているようでむなしいです。#

とにかくありがとうございました。
0034nobodyさん04/03/01 22:45ID:???
>>24
my @numbers = qw(0 1 2 3 4 5 6 7 8 9);
$data = join('', map{ $numbers[$_] } split(//, $data));
こんなでもいいんじゃない?
00353104/03/01 23:02ID:???
>>34
処理速度・負荷がどうかわからんが、例えばSJISの場合以下のように
したらどう? 実行環境が今ないからベンチ採れないけど

tr/\x30-\x39/\x4f-\x58/;
s/(.)/\x82$1/g;
0036nobodyさん04/03/01 23:33ID:???
perlに限った話しではないですが、
複数行の文字列をprintする時、

print ( "hoge\n" );
print ( "hoge2\n" );
print ( "hoge3\n" );
とそのままやるのと、

$buffer .= "hoge\n";
$buffer .= "hoge2\n";
$buffer .= "hoge3\n";
print ( "$buffer" );
と変数に入れて最後にprintするのどっちがいいのですか。
見やすさ、スピード、慣習、などの観点から。
00373404/03/02 00:00ID:???
>>35
use Benchmark qw(:all);
my $result = timethese(-5, {
34=>sub{
my $data = 123456;
my @numbers = qw(0 1 2 3 4 5 6 7 8 9);
$data = join('', map{ $numbers[$_] } split(//, $data));
},
35=>sub{
my $data = 123456;
$data =~ tr/\x30-\x39/\x4f-\x58/;
$data =~ s/(.)/\x82$1/g;
},
});
cmpthese($result);

Benchmark: running 34, 35 for at least 5 CPU seconds...
34: 4 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 27106.27/s (n=143155)
35: 5 wallclock secs ( 5.30 usr + 0.00 sys = 5.30 CPU) @ 37172.03/s (n=197186)
Rate 34 35
34 27106/s -- -27%
35 37172/s 37% --

# @numbersを外へ掃き出した場合。
Benchmark: running 34, 35 for at least 5 CPU seconds...
34: 4 wallclock secs ( 5.31 usr + 0.00 sys = 5.31 CPU) @ 36571.67/s (n=194287)
35: 4 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 37336.99/s (n=197186)
Rate 34 35
34 36572/s -- -2%
35 37337/s 2% --

# 正規表現の方が速いか。
0038nobodyさん04/03/02 00:06ID:???
Perlで出力したHTMLソース内でSSIを使うにはどうすれば良いんでしょうか

Print <<_EOF_;
Content-type:text/html

<html>
......(略)......

<!--#exec cgi="./fSize.cgi"-->
......(略)......
</html>

_EOF_

でやってみたのですが、SSIが単なるコメントとして扱われてしまいました。
0039eaoska047124.adsl.ppp.infoweb.ne.jp04/03/02 00:12ID:QKupWf2O
2chのfusianasanみたい↑に、
リモートホスト?
みたいなものを、取得したいんですが、
$ENV{'REMOTE_ADDR'};
と書いても、数字のIPしか取得できませんでした。

文字列取得するには、どうすればいいですか?
0040nobodyさん04/03/02 00:13ID:???
C言語みたいに
#define NUMBER
0041nobodyさん04/03/02 00:14ID:???
Perlは、
C言語みたいに
#define NUMBER 200
のように、定数を宣言できませんか?
0042nobodyさん04/03/02 00:14ID:???
>>40
お前のドコへのレスだよ
00434204/03/02 00:14ID:???
( ゚д゚)ハッ!
00444104/03/02 00:15ID:???
>>40
ごめんなさい、途中で書き込む押してしまったみたいです。
0045nobodyさん04/03/02 00:16ID:???
>>41
$NUMBER=200;
で$NUMBER使えばいいんじゃないの?
0046nobodyさん04/03/02 00:18ID:???
>>39
鯖によって、$ENV{'REMOTE_ADDR'}; がホスト返さないこともあるから、その場合は
$addr = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $_;}






って書こうとオモタラ$ENV{'REMOTE_ADDR'};ですか。そりゃとれんよ・・・
$ENV{'REMOTE_HOST'}な
0047nobodyさん04/03/02 00:20ID:???
ミスタ

×$ENV{'REMOTE_ADDR'}; がホスト返さないこともあるから
×$ENV{'REMOTE_HOST'}; がホスト返さないこともあるから
0048nobodyさん04/03/02 00:20ID:???
>>47イ�`

>>38
00494104/03/02 00:22ID:???
>>45
それだと、packageにしたとき、使えないみたい

と思ったらいけました。
ごめんなさい。

それでいけました。
失礼しました。
0050nobodyさん04/03/02 00:24ID:???
ここは、ドジッ娘がいっぱいで、ほのぼのとしたインターネットですね。
0051nobodyさん04/03/02 00:38ID:???
sub NUMBER () {200}

これでコンパイラはサブルーチンではなく定数と認識する。
呼び出す時は、「&」とか「()」とか付けずにやる。
でも名前空間はサブルーチンのあれ使ってるからダブルクウォートで展開出来ないよ。
0052nobodyさん04/03/02 00:42ID:???
>>38
0053nobodyさん04/03/02 00:57ID:???
>>36
cmpthese結果だけ。($bufferはmyで確保)
Rate $buffer="hoge" print("hoge\n") print <<"HERE"
$buffer="hoge" 646465/s -- -56% -84%
print("hoge\n") 1454545/s 125% -- -65%
print <<"HERE" 4129032/s 539% 184% --
# ヒアドキュメントを使いましょう。

>>38
出力するHTMLを静的ファイルにして、CGIの結果をSSI取り込むとか。
または静的ファイルを出力して、Locationするとか。

>>41
use constant NUMBER => 200;

>>51と本質は同じなんだけど…。
print "@{[NUMBER]}";
で展開ー。
0054nobodyさん04/03/02 11:50ID:???
ドジッ男て聞かんなあ・・・
0055nobodyさん04/03/02 12:26ID:???
すいません質問です。
カウンタや掲示板のログを読み出すときの、
open(DATAA,"$log");
この部分の$logの前に>や+<とか色々ありますけど、
この辺を詳しく説明してくださる人いませんか?
どれを使っても読めるんで、違いが良くわからないのですが。
00563604/03/02 13:09ID:???
暇な人お願いします。
0057nobodyさん04/03/02 13:21ID:???
>>36
文字列連結するほうは、メモリ確保、開放を繰り返し行うが、その程度なら
たいしたことではない、好きにしろ、俺はヒアドキュメント使う。
0058nobodyさん04/03/02 13:25ID:???
セッションクッキーを書きこんで内容を参照すると、二番目の値の
先頭に半角のブランクがはいって困っています。連想配列に格納して
参照しようとすると先頭の半角もキーにしているためにマッチしません。
半角を入れずにクッキーを書きこめますか?だめなら、取り込んだ後で
半角を取り去るいい方法がありますか??

書きこんでいるコードはこれだけ :
print "Content-type: text/html\n";
$cmax=0;
print "Set-cookie:m_lng_max=$cmax\n";
print "Set-cookie:AVR=1\n\n";

クッキー表示用のCGIで表示させると、
m_lng_max=0; AVR=1
となって、;とAの間に半角スペースがはいります。
0059nobodyさん04/03/02 13:43ID:???
2バイト文字(ひらがなとか)を逆に並べるにはどうしたらいいんですか?
1バイト文字では、reverse関数を使えば実装できるのは確認したんですが、

$str = "あいうえお";
print join('' , reverse(split(// , $str)));
とやっても、文字が化けて読めません。

もしかして、できないんでしょうか・・・?
0060nobodyさん04/03/02 13:48ID:???
>>55
>では読めんだろう。空になるはず。
0061nobodyさん04/03/02 13:54ID:???
>>58
$cookie_data = "name\:$name\,mail\:$mail";
print "Set-Cookie: hoge=$cookie_data;\n";

こんな感じで一つの変数にまとめて突っ込んで、あとから取り出すのじゃダメなん?
0062nobodyさん04/03/02 14:03ID:???
>>59
Perlメモのプログラムを見たら、一応出来た。

$str = "あいうえお";
$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = $str =~ /$ascii|$twoBytes|$threeBytes/og;

print join('' , reverse(@chars));
00636204/03/02 14:04ID:???
参照元はここね。上のプログラムはEUC前提。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Split
00645804/03/02 14:19ID:???
>>61さん
それで全然オッケーです、やってみます。ありがとう。

でも、どうして二番目以降の先頭にブランクがつくのかなあ。
仕様ということにしとこ。
0065nobodyさん04/03/02 15:55ID:???
>>55
http://www.rfs.jp/sitebuilder/perl/02/08.html#ファイル入出力記号の一覧

少しは探せよ
0066nobodyさん04/03/02 23:15ID:???
open FILE, "+<test.txt";
@chinko = ("しりとり\n","りんご\n","ごりら\n","らっぱ\n","ぱんつ\n","つまようじ\n");
print FILE "@chinko";
close FILE;

このようにしてtest.txtを覗くと

しりとり
 りんご
 ごりら
 らっぱ
 ぱんつ
 つまようじ

このように2行目以降の先頭に半角スペースが入ってしまいます。
だれか原因と対策を教えていただけませんか。
0067nobodyさん04/03/02 23:19ID:???
age
0068nobodyさん04/03/02 23:32ID:???
>>66
ネタ?釣り?マジレスしていいの?
0069nobodyさん04/03/02 23:34ID:???
マジレスおながいします。
0070nobodyさん04/03/02 23:39ID:???
>>66
\nのけろ
0071nobodyさん04/03/02 23:48ID:???
ぃゃ改行させたいんです。掲示板のログを作成する部分でログファイルもパっとみてわかる書式で保存したいんです。
掲示板のログが件名からリモホから本文から全部1行でまとまってると見るに耐えないので。
2行目以降の頭の半角スペースが憎いんです。
ループさせて1行ずつ保存するしかないんですかね。
0072nobodyさん04/03/02 23:53ID:???
>>66
しりとり
りんご
ごりら
らっぱのマークの正露丸
0073nobodyさん04/03/02 23:54ID:???
やっぱり釣りか・・・
0074nobodyさん04/03/02 23:56ID:???
>>66
open FILE, "+<test.txt";
@chinko = ("しりとり\n","りんご\n","ごりら\n","らっぱ\n","ぱんつ\n","つまようじ\n");
print FILE @chinko;
close FILE;

3行目
print FILE "@chinko";
の@chinkoの
""を取ればok
0075nobodyさん04/03/02 23:58ID:???
暇な俺が微妙に不親切に教えてやろう。
まずは単純に配列にデータ突っ込んで、
print @chinko;
とだけやれ。

答えはそこにある。
0076nobodyさん04/03/03 00:01ID:???
ほんとは
print "@chinko\n\n";
としたかったんだけどね。ありがとう。
\n\nは分けてやります。
0077nobodyさん04/03/03 00:05ID:???
>>76
それって意味あんの?
配列の最後に改行が2回入るだけじゃん・・・
0078nobodyさん04/03/03 00:07ID:???
>>76
・・・
悪いことは言わない。
Perl止めろ
0079nobodyさん04/03/03 00:07ID:???
2行空けると見やすくなる。っていうだけ。
0080nobodyさん04/03/03 00:18ID:???
>>79
ファイルの終端から2行空けて何の意味があるんだ?
0081nobodyさん04/03/03 00:20ID:???
>>79
open FILE,"+<test.txt";
@chinko = ("しりとり\n","りんご\n","ごりら\n","らっぱ\n","ぱんつ\n","つまようじ\n");
print FILE @chinko;
print FILE "\n";
close FILE;

こうしれば?
一応期待どうりになるよ
0082nobodyさん04/03/03 00:23ID:???
配列・リスト・スカラーをわかってやってるんか?こいつは。
0083nobodyさん04/03/03 00:27ID:???
>>80
新規のログを@new_logにぶっこんでファイルに出力して2行改行いれて
配列に\n\nいれてもいいけどいまさらいじるのめんどくさい。
ぃゃちょっとだけど。
その次の行からあらかじめ保存してある@temp_logをぶっこむ。
最終的に期待道理になればなんでもえーじゃないの。
0084nobodyさん04/03/03 00:30ID:???
print foreach(@chinko);
0085nobodyさん04/03/03 00:31ID:???
ハァ?


だから、データの後に意味のない改行入れてどういう効果があるんだ?
お前はファイルの中身の最後とエディタの縁の間に空白がないと嫌なのか?
0086nobodyさん04/03/03 00:36ID:???
@temp_logの最後には記事番号の現在地が格納されてるのでエディタの縁との間隔は0です。
新規書き込みの時は一番上に今の記事番号が格納されることになるけど、
レスとか含めてログファイルには記事番号の順番にログが格納されるわけじゃないんですよ。
なのでtemp_logの最後においとくとpopで取得して++したらpushで格納できるから便利なのですよ。
ログの続きで改行あけずに格納すると視認性悪そうですしねー。
0087nobodyさん04/03/03 00:38ID:???
ていうかageてたごめん。
0088nobodyさん04/03/03 00:40ID:???
No<>名前<>記事
No<>名前<>記事
No<>名前<>記事
No<>名前<>記事
・・
・・
・

って普通にするんじゃいかんのか?
0089nobodyさん04/03/03 00:48ID:???
1. comment
2. 1
3. 七資産
4. [email protected]
5. http://www.unko.cojp/chinchin/
6. 無題テキスト
7. となりの<br>柿は<br>よく<br>客食う<br>柿だ。
8. 何月何日何時何分難病
9. モジラなんとかかんとか
10. リモホ
11. IPアドレス
12. 削除キー
13. 
14. 
15.    res
16.    2
17.    1(親記事番号)
18.    七資産
19.    [email protected]
20.    http://www.unko.cojp/chinchin/
21.    タイトル
22.    本文
23.    何月何日何時何分難病
24.    モジラとか
25.    リモホ
26.    IP
27.    削除キー
28.    
29. 
30. 2
EOF
0090nobodyさん04/03/03 00:49ID:???
ログがこうなってると見やすくてよくない?
0091nobodyさん04/03/03 00:55ID:???
>>89
プログラム的に面倒・・・
0092nobodyさん04/03/03 00:57ID:???
うん。超面倒。でもまあそうしたいからがんばるよ。
0093nobodyさん04/03/03 00:58ID:???
>>89
なんていうか、ド素人というか・・・
ログファイルの見た目なんかどうでもいいやろ。。
簡単にコード組めるか、のほうが大事やろ
0094nobodyさん04/03/03 01:00ID:???
別にいいじゃん。俺は見やすいのがスキなんだよ。
趣味でやってんだから細部まで凝りに凝りたいじゃん。
0095nobodyさん04/03/03 01:00ID:NMlynacq
ある問題が解けなくて困っています。
問題↓

ファイル xy-data.dat には,カンマで区切られた2つの整数データが並んだ行が何行か格納されている.
各行の最初の整数値をx,次の整数値をyとしてx-y座標上の点(x.y)をファイルの行数個考える.これらの点のうちで、原点が(4,7)、半径4の円の内側(円周上は除く)に含まれる点の数を出力するプログラムを作成せよ.

画面には、結果である数以外の出力をしないこと.

ファイルは
open("IN_FILE","<xy-data.dat");
としてopenし,このファイルからデータを読み出す時は,

$xy=<IN_FILE>
$xy =~ /(\d+)\D+(\d+)/;
$x = $1;
$y = $2;

として読み出せばよい.(まず変数$xyにファイルから1行読み出し,次に$xyの内容をカンマで区切られた前半と後半に分けて,前半を変数$xに後半を変数$yに代入する)
また,読み出しが終わったら,
close(IN_FILE);
としてクローズすること.

どうすればいいのか見当がつきません。お願いします
0096nobodyさん04/03/03 01:08ID:???
>>94
@chinko = ("しりとり\n","りんご\n","ごりら\n","らっぱ\n","ぱんつ\n","つまようじ\n");
open FILE,"+<test.txt";
@unko=<FILE>;
unshift @unko,@chinko;
truncate(FILE,0);
seek(FILE,0,0);
print FILE @unko;
print FILE "\n";
close FILE;
■ このスレッドは過去ログ倉庫に格納されています