1 名前:nobodyさん mailto:sage [2008/02/25(月) 19:25:51 ID:???] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ pc11.2ch.net/test/read.cgi/php/1189939783/ 過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
91 名前:nobodyさん mailto:sage [2008/03/11(火) 09:53:07 ID:???] >>87 +0900の部分はグリニッジ比だから-から始まることもあり得る。
92 名前:nobodyさん [2008/03/11(火) 12:11:54 ID:PA7R3QgS] CPANモジュールのSpreadsheet::WriteExcelを導入しています。 このモジュールのあるバージョン以下の場合はメソッドA実行、それ以外はメソッドB実行 といった振り分けを行いたいのですが、モジュールのバージョンをperl上で調べるには どうすればいいのでしょうか? print $SpreadSheet::WriteExcel::VERSION; としても、何も表示されませんでした。
93 名前:nobodyさん mailto:sage [2008/03/11(火) 12:35:37 ID:???] version 2.18 はそれできちんと表示された。その他の version は知らん。 ソースに当ってみたら?
94 名前:nobodyさん mailto:sage [2008/03/11(火) 13:47:11 ID:???] >>93 レスありがとうございます。わざわざ調べて頂きどうもです。 やってしまいました。 print $SpreadSheet::WriteExcel::VERSION; ではなく、 print $Spreadsheet::WriteExcel::VERSION; でした。これははずかしい(*´Д`) バージョン2.15、2.20とも表示されました。大変失礼しました。
95 名前:nobodyさん mailto:sage [2008/03/11(火) 14:00:50 ID:???] どっちも同じなのだがw
96 名前:nobodyさん mailto:sage [2008/03/11(火) 14:26:49 ID:???] 大文字小文字
97 名前:nobodyさん mailto:sage [2008/03/11(火) 14:34:32 ID:???] あ〜ww
98 名前:nobodyさん mailto:sage [2008/03/12(水) 10:02:54 ID:???] >>94 use strict汁!
99 名前:nobodyさん mailto:sage [2008/03/12(水) 20:50:08 ID:???] 突然すみません。 Perlの勉強中で簡素なプログラムを作成しているのですが POSTでデータがうまく送信できなくて困っています。 同じコードでMETHOD="GET"とすると送信できるのですが パスワード入力などをするため、URLにパラメータを表示したくないのです。 お知恵を拝借させてください。よろしくお願いします
100 名前:nobodyさん mailto:sage [2008/03/12(水) 20:55:51 ID:???] >>99 POSTで送ることがわかってるなら調べれば簡単だと思うんだが。 CGI.pmとか使うと簡単にできる
101 名前:nobodyさん mailto:sage [2008/03/12(水) 21:02:36 ID:???] 送信出来ないのでなく受信したあとの処理が出来てないに1000ペリカ
102 名前:nobodyさん mailto:sage [2008/03/12(水) 21:04:45 ID:???] >>100 様 迅速なレス、感謝します。 浅学でお恥ずかしいのですがCGI.pmについてこれから調べてみます。 ありがとうございます。
103 名前:nobodyさん mailto:sage [2008/03/12(水) 21:10:03 ID:???] >>101 様 レスありがとうございます 受信後の処理は、次のような処理を記述しております if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $form, $ENV{'CONTENT_LENGTH'}); } else { $form = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $form); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/>/>/g; $value =~ s/</</g; &jcode'convert(*value, 'sjis'); &jcode'convert(*name, 'sjis'); $FORM{$name} = $value; } GETだとうまく処理されるので2行目の read(STDIN, $form, $ENV{'CONTENT_LENGTH'}); が怪しそうですね。 CGI.pm?で調べられるのかどうなのかまだよくわかっておりませんが まずいところの見当すらつかなかったので助かります。 ありがとうございます。
104 名前:nobodyさん mailto:sage [2008/03/12(水) 21:18:29 ID:???] ぱっと見た感じ問題なさそうだけどな しかしnameにも日本語を使ってるのか
105 名前:nobodyさん mailto:sage [2008/03/13(木) 00:55:15 ID:???] KENTのコピペ臭がするのは俺だけ?
106 名前:nobodyさん mailto:sage [2008/03/13(木) 01:19:37 ID:???] >>103 うーん、区切りがほんとに’&’なのかな。 一回、 print $form ; やってみれば?
107 名前:nobodyさん mailto:sage [2008/03/13(木) 02:21:43 ID:???] Perl4時代のこの定番処理がいまだに使われてるってのもなぁ
108 名前:nobodyさん mailto:sage [2008/03/13(木) 03:58:19 ID:???] そこでcgi-lib.plですよw
109 名前:nobodyさん mailto:sage [2008/03/13(木) 13:54:44 ID:???] 最近、GET/POSTのデータやテキストファイルを自前で読み込まなきゃならないことがあって 「あれ? どうやるんだっけ?」と本気で焦った俺。 使わないとそんなもんだよな。
110 名前:nobodyさん mailto:sage [2008/03/13(木) 20:56:52 ID:???] >>109 ライブラリが整備されてそっち使うと忘れるんだよな
111 名前:nobodyさん [2008/03/14(金) 00:19:02 ID:jE/64EXv] くだすれにも書き込んだ者ですが。 $aaa=1; if($aaa==1||$aaa==3) これをもっと簡潔に書くにはどうすればいいですか。 あと、「$aaaが8のn倍ならマッチさせる」というのも わかりませんでした、おねがいしますm(_ _)m
112 名前:nobodyさん mailto:sage [2008/03/14(金) 00:26:38 ID:???] !($aaa % 8) ← これで8の倍数のチェックだけど、マイナス値は試してないのでわかんないw 8で割ってみて余りが0なら割り切れてるので8の倍数ということ
113 名前:nobodyさん mailto:sage [2008/03/14(金) 00:34:03 ID:???] $aaa=1; if($aaa==1||$aaa==3) if ($aaa =~ /^[13]$/) こんなのできないこともないけど、そのままでいいんじゃないか?
114 名前:111 [2008/03/14(金) 00:40:08 ID:jE/64EXv] >112 そういうやりかたもあるんですね。 >113 極端にいえば if($aaa==1||$aaa==5||$aaa==13||$aaa==17||$aaa==25||$aaa==34||) こんなに長くなってしまう。 これじゃあまりにもじゃないですか?
115 名前:nobodyさん mailto:sage [2008/03/14(金) 01:07:31 ID:???] $aaa==9 や $aaa==21 が入ってなくて $aaa==34 が出てくるから 長くなるんだと思う。
116 名前:nobodyさん mailto:sage [2008/03/14(金) 01:13:26 ID:???] ありえる数字を列挙させて、それのチェック対象が1つの変数なら 1つの変数に対して配列で一気にチェックできた気がする grep 使ったような使わなかったような・・・ごめん。 俺にはもう無理w
117 名前:nobodyさん mailto:sage [2008/03/14(金) 01:41:34 ID:???] 長くて見づらいけど、処理量が多くて重くなるよりはマシかな。 そんな劇的な違いは無いとしても気分的になんとなくw
118 名前:nobodyさん mailto:sage [2008/03/14(金) 01:51:12 ID:???] 重いと言っても何百万回も繰り返さないから、こうしちゃうなw if($aaa =~ /^(1|5|13|17|25|34)$/)
119 名前:nobodyさん mailto:sage [2008/03/14(金) 06:02:08 ID:???] %tmp = map { $_ , 1 } ( 1, 5, 13, 17, 25, 34 ) ; if ( defined $tmp{$aaa} ){ print "俺の名を言ってみろ\n" ; }
120 名前:nobodyさん mailto:sage [2008/03/14(金) 11:41:19 ID:???] >>116 grep使う方法だとこうかな? if ( grep { $aaa == $_ } qw( 1 5 13 17 25 34 ) ) { # code here }
121 名前:nobodyさん mailto:sage [2008/03/14(金) 11:42:57 ID:???] # no 5.10 grep { $aaa == $_ } qw/1 5 13 17 25/; # use List::MoreUtils qw/any/; any { $aaa == $_ } qw/1 5 13 17 25/; # use 5.10 $aaa ~~ [qw/1 5 13 17 25/];
122 名前:nobodyさん mailto:sage [2008/03/14(金) 11:53:06 ID:???] ほとんどの場合、ブロックより式の方が早いので my %tmp = map +( $_ => 1 ), ( 1, 5, 13, 17, 25, 34 ); grep $aaa == $_ ,( 1, 5, 13, 17, 25, 34 );
123 名前:nobodyさん mailto:sage [2008/03/14(金) 14:50:45 ID:???] dankogaiがエントリ書いてた ttp://blog.livedoor.jp/dankogai/archives/51017983.html
124 名前:nobodyさん mailto:sage [2008/03/14(金) 15:48:58 ID:???] >>111 >>113-122 www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_can_i_tell_whether_a_certain_element_is_contained_in_a_list_or_array
125 名前:nobodyさん [2008/03/14(金) 22:34:42 ID:exCIvuwa] Perl初心者です。宜しくお願いします。 ディレクトリ探索し、ディレクトリの中の「.txt」をファイルを見つけたら その行数を出力したいのですが、「open(FH, "$_") or die;」のところで 落ちます。何がいけないのでしょうか? ---ここから use File::Find; my $dir = 'TestDir'; find(\&print_file, $dir); sub print_file { $_ = $File::Find::name; if (/.+\.txt/) { print "$_ \t"; open(FH, "$_") or die; 1 for <FH>; print $. . "行\n"; close(FH); } else { print "$_ \n"; } }
126 名前:nobodyさん mailto:sage [2008/03/14(金) 22:50:02 ID:???] >>125 open(FH, "$_") or die "$! [$_]"; 1 while <FH>; とでもして吐かれたエラーメッセージを読む。
127 名前:nobodyさん mailto:sage [2008/03/14(金) 23:25:19 ID:???] >>125 File::Find の find では pwd が変りますが、 $File::Find::name で得られるのはこの場合は $dir からのパス。 use Cwd ; して if 文の中に print getcwd ; して確認してみそ。 簡単な解決方法は、$dir にゼッタイパスを突っ込め。 それから perldoc File::Find くらいしろ。
128 名前:nobodyさん [2008/03/16(日) 19:27:01 ID:483Ek7KZ] Commonで漢字を含むデータをPOSTしたいのですが、漢字部分が出力されません。 以下で生成されたcontentをチェックしても、漢字だけ消えています。 どの様にすれば良いでしょうか。 よろしくお願いいたします。 use encoding "shift-jis"; LWP::UserAgent; use HTTP::Request::Common qw(POST); my %form=('test'=>'漢字123'); my $request = POST('test.test ',[%form]); my $con=$request->content; print "test:$form{test}\n"; print "content:$con\n"; 出力 test:漢字123 content:test=123
129 名前:nobodyさん mailto:sage [2008/03/16(日) 22:26:04 ID:???] >>128 # use encoding "shift-jis"; # LWP::UserAgent;
130 名前:nobodyさん [2008/03/16(日) 23:03:42 ID:eaCmNgRi] はじめましてこんにちは。 自作の掲示板を作ってまして、ある書き込みにレスが付いた場合は そのレスの数をカウントして画面に表示させる、という事をやってます。 現状はこんな感じです。 print "($res)<br>\n" if ($res ne ""); レスがある場合は(9)とかの某かの数字、レスが付いてない場合は空白という所までは 上手く行ってるのですが、 この(9)の部分を赤で出力したいと思ってます。 出来れば上記の命令の中だけで完結させたいのですが、無理でしょうか?
131 名前:nobodyさん mailto:sage [2008/03/16(日) 23:16:51 ID:???] >>130 print qq|<span style="color:red;">($res)</span><br>\n| if $res; Webサイト制作初心者用質問スレ Part 194 pc11.2ch.net/test/read.cgi/hp/1204015309/ △▲ WebProg 初心者の質問 Part17 ▼▽ pc11.2ch.net/test/read.cgi/php/1204462146/
132 名前:nobodyさん [2008/03/17(月) 02:23:56 ID:WVXzjYIy] >>129 ありがとうございました。 ただ、UserAgentは使うのでコメントアウトできません。 EUCでソースを書き、1行目だけコメントアウトで解決しました。
133 名前:nobodyさん [2008/03/17(月) 11:04:17 ID:+D1UxdpV] >>126 >>127 ありがとうございました。解決しました。
134 名前:130 [2008/03/17(月) 21:21:26 ID:iYfDDUad] >>131 ありがとうございました、無事に解決いたしました。 これを応用して、文字のサイズを変える事もやってみましたが上手く行きました! ところで考え方の確認を1つ。。。 admin.cgiで生成した画面から、subって画像をUPロード。 その画像を、album.cgiという別の画面上に表示させていて上手く動いてるのですが、 「その画像がUPされた日時をalbum.cgiの画面上に表示させる。」という事を考えています。 すごーく単純に考えて、 「subる直前に日時を取得して、それを変数に格納。その変数をalbum.cgiに渡して、その変数をprintすればOKかも。」 と考えてやってますが上手く行きません。(表示すらされない。) もともとCOBOラーなもんで、この手のコーディングは激苦手なのですが四苦八苦しながら何とかやってます。 変数の初期化は?変数は共通変数なのかpg内変数なのか?受け渡しはどうやってやるのか? などなど色々疑問は尽きませんが、そもそも上記の考え方でおかしくはないですか?
135 名前:nobodyさん mailto:sage [2008/03/17(月) 22:03:37 ID:???] >>134 >>1-3 △▲ WebProg 初心者の質問 Part17 ▼▽ pc11.2ch.net/test/read.cgi/php/1204462146/ CGI: Common Gateway Interface part 13 pc11.2ch.net/test/read.cgi/php/1126436361/
136 名前:nobodyさん mailto:sage [2008/03/18(火) 10:37:05 ID:???] >>134 CGIプログラム:バッチ htmlフォーム:コマンドライン と考えれば、おのずと答えが見えると思われ。 各バッチ処理間でデータをやり取りするには、 ・ファイルまたはDBに格納する ・コマンドラインオプションを利用しうまく受け渡す方法を考える のいずれかになる。 CGIプログラム間でうまくデータを受け渡すには ・セッション(ファイルまたはDB)を利用する ・htmlフォームデータとして生成しPOSTする(値を変えられたくなければHIDE要素にする) のいずれかになる。
137 名前:nobodyさん mailto:sage [2008/03/18(火) 11:07:18 ID:???] 小難しく考えるなよ stat使えばいいだろ
138 名前:nobodyさん [2008/03/18(火) 17:51:36 ID:yz+TlyvN] お世話になっております。 ---------------- sub test{ $hoge = shift; $fuga = shift; $hoge += $fuga; } ---------------- のような感じのプログラムを作っていましたが うまくいかなくてどうしてだろうかと考えた所 文字列として認識していたっぽいです。 この $fuga を 数字に明言したいのですが どのようにやるのでしょうか? 以上 ご助力いただけますとありがたいです。
139 名前:nobodyさん mailto:sage [2008/03/18(火) 18:20:21 ID:???] >>138 デバッグの基本、$fugaをprintしてみる
140 名前:nobodyさん mailto:sage [2008/03/18(火) 18:25:39 ID:???] >>138 $hoge と $fuga に数字がきちんと入ってたら、最初に文字列として認識してようと、 += の段階で数字として扱ってくれるだろ…。他の部分のミスじゃね?
141 名前:nobodyさん mailto:sage [2008/03/18(火) 18:26:00 ID:???] $hogeか$fugaに数字以外の記号(改行とか)が混じっていると予想
142 名前:138 [2008/03/18(火) 18:30:10 ID:yz+TlyvN] RESありがとうございますっ $hogeか$fugaに数字以外の記号が入っている場合もあり ソノ場合は0として扱いたいのですが 数字が入っていた場合は数字として扱いたいのです、、、 num $fuga int $fuga などで数字と明言する方法があったような気がするのですが 私の勘違いでしょうか???
143 名前:nobodyさん mailto:sage [2008/03/18(火) 18:35:55 ID:???] 勘違い。 っつーかデバッグして調べろよ
144 名前:nobodyさん mailto:sage [2008/03/18(火) 19:26:34 ID:???] 内容が多いハッシュの値があって、それをデータベースに格納するのに、 そのままSQL文を書くと長いので my ( @n, @q, @p ); foreach my $key ( keys %hash ) { push @n, $key; push @q, '?'; push @p, $hash{$key}; } my $sth=$dbh->prepare('INSERT INTO test('.join(',',@n).') VALUES('.join(',',@q).')'); $sth->execute(@p); という形でSQL文を構築してデータを格納しているのですが、 もう少しスマートな方法は無いでしょうか?
145 名前:nobodyさん mailto:sage [2008/03/18(火) 19:50:13 ID:???] my $sth=$dbh->prepare('INSERT INTO test('.join(',',keys %data).') VALUES('.join(',',map{'?'}(keys %data)).')'); $sth->execute(map{$data{$_}}(keys %data)); 適当にmapで記述したら、ここまで短くなりましたが、map{'?'}(keys %data)の辺りは、 もうちょっとスマートな方法がありそう…。
146 名前:nobodyさん mailto:sage [2008/03/18(火) 20:25:49 ID:???] >>145 スマートな方法より可読性を選んだら? keys %data を三回も呼ぶんだったらアレイに突っ込むだろ。 ついでに、join ',' も二回あるんだったらサブルーチンかなんかにしちまえ。<= 嘘。 sub foo { return join ',', @_ ;} ; @arr = keys %data ; my $sth=$dbh->prepare('INSERT INTO test('. &foo( @arr ) .') VALUES('. &foo( ('?') x @arr) ).')'); $sth->execute( @data{ @arr } ); てきとーに書いたから、' とか抜けてても勘弁。
147 名前:nobodyさん mailto:sage [2008/03/18(火) 21:49:40 ID:???] >>138 #!/usr/bin/perl -w use strict; use Scalar::Util qw(looks_like_number); test(@ARGV); test(map looks_like_number($_) ? $_ : 0, @ARGV); sub test { my($hoge, $fuga) = @_; print "hoge:[$hoge] fuga:[$fuga] "; $hoge += $fuga; print "result:[$hoge]\n"; } >>144 my $col = join ',', my @col = keys %hash; my $phs = join ',', ('?') x @col; my $sth = $dbh->prepare("INSERT INTO test($col) VALUES($phs)"); $sth->execute(values %hash);
148 名前:138 [2008/03/19(水) 16:21:54 ID:uoUGbd4u] >147さん RESありがとうございます。 >143さん おっしゃるとおりでした。 すいません。デバッグしてみますと整数になっていなかった訳ではなくバグでした。 下記のようなプログラムでタブ区切りのファイル内の$filename (フォーマットは「名前\t\t\t\t\t\t\t数\t\n」) でハッシュデータで $hash{名前}->数 とやろうとして下記のようにプログラムを組んでみました。 ---------------- open(FH,"$filename"); my @data = <FH>; close(FH); my %hash = (); foreach(@data){ my @splitdata= split(/\t/); if(defined $hash{$splitdata[7]}){ print "<>$splitdata[7]no$hash{$splitdata[7]} ha mouaru<><br>"; }else{ $hash{$splitdata[7]} = 0; print "$splitdata[7] wo sengen<br>"; } } my $key; foreach $key ( keys %hash ) { print "$key<br>"; foreach(@data){ my @splitdata= split(/\t/); if($key eq $splitdata[7]){ print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>"; $hash{$key} += $splitdata[10]; print "$hash{$key} : $hash{$splitdata[7]}<br>"; } } } (続く)
149 名前:138 [2008/03/19(水) 16:23:18 ID:uoUGbd4u] (続き) ---------------- それで出力が print "$hash{$key} ni $splitdata[10] tumari $hash{$key} += $splitdata[10];wo tasu<br>"; $hash{$key} += $splitdata[10]; print "$hash{$key} : $hash{$splitdata[7]}<br>"; の所が 0 ni 2 tumari 0 += 2 ;wo tasu 0 : 0となっていたのですが どのようにすれば ハッシュデータで $hash{名前}->数 とのハッシュデータを取得できますでしょうか? 以上 ご助力をいただけますとありがたいです。
150 名前:nobodyさん mailto:sage [2008/03/19(水) 16:44:42 ID:???] 日本語で
151 名前:nobodyさん mailto:sage [2008/03/19(水) 16:56:44 ID:???] ひどすぎワロタwww
152 名前:nobodyさん mailto:sage [2008/03/19(水) 17:13:34 ID:???] $hash{名前}->数ってこれはリファレンス的な意味じゃないよね? $hash{名前} = 数で取り出したいってこと? $splitdata[10]てなに?空じゃないの? $hashには$hash{$splitdata[7]} = 0; この部分でしか入れてないよね?
153 名前:nobodyさん mailto:sage [2008/03/19(水) 17:20:14 ID:???] > (フォーマットは「名前\t\t\t\t\t\t\t数\t\n」) $splitdata[0] が「名前」 $splitdata[7] が「数」 に見える。 コードは $splitdata[7] が「名前」 $splitdata[10] が「数」 っぽいことになってるし、いつのまにか $splitdata[10] に 2 が入ってるし、よくわかんない。 (exists $hash{$splitdata[0]}) かどうか調べて、なかったら用意して $hash{$splitdata[0] += $splitdata[7] したいんじゃないのかな。
154 名前:153 mailto:sage [2008/03/19(水) 17:21:25 ID:???] 最後の行 $hash{
155 名前:153 mailto:sage [2008/03/19(水) 17:23:29 ID:???] すみません。} を打とうとしたら shift + enter を押して鬱。 $hash{$splitdata[0]} の } が抜けてました。
156 名前:nobodyさん mailto:sage [2008/03/19(水) 17:28:37 ID:???] map { $hash->{$_->[0]} += $_->[7]; } map { chomp; [split(/\t/)]; } @data;
157 名前:nobodyさん mailto:sage [2008/03/19(水) 23:15:18 ID:???] このスレが相応しいかわかりませんが質問させてください。 perl 5.8.4 mysql 4.1.11 OS debian 上記の環境でお勉強目的で BBS を作成しています。 データ自体は utf8 で格納出来ているはずですが、 perl 取得した結果を print した 際に文字化けが発生してしまいます。何処を注意すべきでしょうか? # やってる内容をかいつまんで記入します use DBI;use utf8;use Encode; binmode STDIN, ":encoding(utf8)"; binmode STDOUT, ":encoding(utf8)"; $db = DBI->connect("DBI:mysql:database:localhost:$port", "hoge", "hoge"); $db->prepare("set character set utf8"); あとはセレクトして print しているだけ # DB の中身は dump したファイルが utf8 で出力されていたのでデータは utf8 のはずです
158 名前:nobodyさん mailto:sage [2008/03/19(水) 23:41:08 ID:???] >>157 OSの設定はutf-8か、日本語が表示できるシェルを使ってるか
159 名前:nobodyさん mailto:sage [2008/03/19(水) 23:45:37 ID:???] BBSなんだからHTML吐いてるんじゃないの? それでメタタグの文字コード宣言が違うとか
160 名前:157 mailto:sage [2008/03/20(木) 12:29:10 ID:???] おはようございます。 apache を使ってブラウザ上に表示させてます。 メタタグには一応 utf-8 って記入してます。 ブラウザ側の文字コードも utf-8 になってました
161 名前:nobodyさん mailto:sage [2008/03/20(木) 12:38:21 ID:???] BOM付いてる希ガス
162 名前:nobodyさん mailto:sage [2008/03/20(木) 13:03:57 ID:???] for ($i=0; $i<6; $i++) { for ($j=0+$i*10; $j<10+$i*10; $j++) { $box[$i][$j] = $j; }; }; print "$box[0][0]\n"; print "$box[0][1]\n"; print "$box[0][2]\n"; print "$box[0][3]\n"; print "$box[0][4]\n"; print "$box[0][5]\n"; print "$box[0][6]\n"; print "$box[0][7]\n"; print "$box[0][8]\n"; print "$box[0][9]\n"; print "$box[1][0]\n"; print "$box[1][1]\n"; print "$box[1][2]\n"; print "$box[1][3]\n"; print "$box[1][4]\n"; print "$box[1][5]\n"; print "$box[1][6]\n"; print "$box[1][7]\n"; print "$box[1][8]\n"; print "$box[1][9]\n"; 上記のプログラムを実行すると、$box[1][x]が表示されないのはなぜ?
163 名前:nobodyさん mailto:sage [2008/03/20(木) 13:33:56 ID:???] print "$box[1][0+$i*10]\n";だから。
164 名前:nobodyさん mailto:sage [2008/03/20(木) 13:41:13 ID:???] $box[$i][$j] = $j; の行の次に print "[$i][$j]\n"; 入れて表示してみ
165 名前:nobodyさん mailto:sage [2008/03/20(木) 13:42:25 ID:???] $box[$i][$j] = $i * 10 + $j; 期待する動作はこれかな?
166 名前:nobodyさん mailto:sage [2008/03/20(木) 13:43:46 ID:???] >>163 俺には理解不能だ もうちと、噛み砕いておしえてくれ
167 名前:162 mailto:sage [2008/03/20(木) 13:44:57 ID:???] みなさん、レスありがと。 今、飯食ってるから 終わったら試してみる。
168 名前:nobodyさん mailto:sage [2008/03/20(木) 13:54:36 ID:???] >>164 意図した動きになってる。 iもjもちゃんと入れ子になって ループしている
169 名前:nobodyさん mailto:sage [2008/03/20(木) 13:56:38 ID:???] >>164 あ!ごめんなさい ちと、おかしい
170 名前:nobodyさん mailto:sage [2008/03/20(木) 14:02:32 ID:???] >>165 そうでした。
171 名前:162 mailto:sage [2008/03/20(木) 14:03:22 ID:???] 皆様、ありがとうございます。 解決できました。 PG久しぶりなんで、 頭が退化してたようです。
172 名前:nobodyさん mailto:sage [2008/03/20(木) 14:11:42 ID:???] 10 x 10 の箱に連番を入れたかっただけだけど、配列のインクリメントでちとボケてただけですね まぁ俺もたまに似たようなミスするのであまりコケにできないwww
173 名前:nobodyさん mailto:sage [2008/03/20(木) 15:57:38 ID:???] またお願いします。 見た目の桁数を8桁に揃えたいんです。 先頭は空白にしたいのですが、下記でうまくいきません。 $len = 8 - length($num); $head = " " x $len; $txt = $head.$num; 2行目を $head = "a" x $len; とすれば、先頭に "a"は入って、桁が揃うんです。 それとも連続空白を表す記号みたいな物は あるのでしょうか?
174 名前:nobodyさん mailto:sage [2008/03/20(木) 16:03:28 ID:???] webブラウザが半角スペースをつぶしちゃうからとかじゃなくて?
175 名前:nobodyさん mailto:sage [2008/03/20(木) 16:12:49 ID:???] >>174 げ!、ソースを見たらちゃんと空白が入ってました。 ブラウザで表示すると空白がなくなっちゃう。。。 これはなんでですか?
176 名前:nobodyさん mailto:sage [2008/03/20(木) 16:43:28 ID:???] ブラウザの仕様
177 名前:nobodyさん mailto:sage [2008/03/20(木) 17:00:56 ID:???] ブラウザで桁をそろえたいなら、表示する部分のフォントを font-family: monospace; にしたうえで空白を にすればいいです。
178 名前:nobodyさん [2008/03/20(木) 20:32:02 ID:cqY9pHpE] <pre></pre>
179 名前:162 mailto:sage [2008/03/20(木) 22:32:36 ID:???] >>178 それは、クライアントの読み込みが遅くなるので あきらめました。 にしました。
180 名前:162 mailto:sage [2008/03/20(木) 22:33:29 ID:???] & n b s p ; に、しました。
181 名前:nobodyさん mailto:sage [2008/03/20(木) 23:06:14 ID:???] 「&nbsp;にしました」と書けばok
182 名前:nobodyさん mailto:sage [2008/03/20(木) 23:17:39 ID:???] >>181 むぅ、また、難しいことを言うな。 明日、調べます。
183 名前:nobodyさん mailto:sage [2008/03/20(木) 23:33:13 ID:???] >>182 いやいや、難しい話でなく。>>181 が言ってるのは 「&nbsp;にしました」と入力して投稿すれば 「 にしました」と表示されるからスペース不要ってだけの話だと思うよ。 # でも確か専ブラによって表示が違ったはず。<エンティティ方面
184 名前:nobodyさん mailto:sage [2008/03/21(金) 10:02:10 ID:???] nbsp;でも詰まるよ HTMLでalign=rightのほうがいいんじゃない?
185 名前:nobodyさん mailto:sage [2008/03/21(金) 10:37:17 ID:???] それはプロポーショナルたからな 桁そろえるのにHTMLのブロック要素を使わなかったり 固定幅フォントを使わないのはバカだゆん
186 名前:157 mailto:sage [2008/03/21(金) 11:32:07 ID:???] >>157 です 自己解決決しました。 SQL を実行する前に SET NAMES utf8 を実行する必要があったみたいです。 一旦 SET NAMES utf8 を実行した後で select/insert/etc... を実行しないと 化けてしまうようです。 ナゼ化けるのかは理解できていませんが・・・。 # たぶん utf-8 以外で MySQL から出力しようとして化けてしまうとは思いますが理解できていません。
187 名前:nobodyさん mailto:sage [2008/03/21(金) 13:27:45 ID:???] ふと>>144 の解答で疑問に思ったのですが… ハッシュ値の並び方が呼び出しのタイミング等で 一致しないのは知ってますが、keys %hash と values %hash の 並び方って必ず組み合わせが一致するのでしょうか?
188 名前:nobodyさん mailto:sage [2008/03/21(金) 13:31:00 ID:???] keys使ってからをvaluesを使うまでにハッシュの内容を変えなかった場合一致するよ
189 名前:nobodyさん mailto:sage [2008/03/21(金) 18:55:25 ID:???] どなたか、10進数を26進数(使える文字はAからZ)に変換するサブルーチンを教えてください
190 名前:nobodyさん mailto:sage [2008/03/21(金) 21:10:27 ID:???] >>189 my $Number10 = 1234; # 10進数 # 2進数 #my @digits = ('0','1'); # 16進数 #my @digits = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); # 8進数 #my @digits = ('0','1','2','3','4','5','6','7','8'); # 26進数 my @digits = ('A'..'Z'); print &to_base($Number10,\@digits); sub to_base { my $num = shift; my $digits = shift; my $dignum = @{$digits}; my $result = ''; while ($num > 0) { substr($result,0,0) = $$digits[ $num % $dignum ]; $num = int ($num / $dignum); } return length $result ? $result : $$digits[0]; }
191 名前:nobodyさん mailto:sage [2008/03/21(金) 21:33:13 ID:???] >>189 sub conv($){ my $alpha = 'A' ; $alpha ++ for 1 .. $_[0] ; return $alpha ; } printf "%d\t%s\n", $_, conv $_ for 0 .. 200 ;