SE-1 の回答履歴
- 数値の多い順に別々の処理をする場合
例えば $a = int rand(100); $b = int rand(100); $c = int rand(100); $d = int rand(100); $e = int rand(100); $f = int rand(100); $z = 5; $y = 10; という風にして、$aの数値が一番多い時は「$z + $y」を、$bの数値が一番多い時は「$z - $y」を、と数値を多い順に変数の数だけ別々の処理をしたいときはどうすれば良いのでしょうか? 数日前から気になっていて、初心者なもんでif文やwhile文で地道に長いプログラムしか答えが思いつきません>_< 短くする方法などありましたらどなたか教えてくださいm(_ _)m
- 数値の多い順に別々の処理をする場合
例えば $a = int rand(100); $b = int rand(100); $c = int rand(100); $d = int rand(100); $e = int rand(100); $f = int rand(100); $z = 5; $y = 10; という風にして、$aの数値が一番多い時は「$z + $y」を、$bの数値が一番多い時は「$z - $y」を、と数値を多い順に変数の数だけ別々の処理をしたいときはどうすれば良いのでしょうか? 数日前から気になっていて、初心者なもんでif文やwhile文で地道に長いプログラムしか答えが思いつきません>_< 短くする方法などありましたらどなたか教えてくださいm(_ _)m
- <>の意味が分かりません
http://www.shoeisha.com/book/pc/dic/perlcgi.asp こちらのサンプルソース(14_bbs/bbs2.cgi)で出てきたのですが、 掲示板のプログラムでいまいち分からないところがありました。 ちなみにmsg/ディレクトリには掲示板のログファイルがあります。 ファイル名は20030421153719_1504といった年月日に アンダースコアを挟んでプロセスIDをくっつけたものですが、 質問には関係ないかも知れません。 my $logDir = "msg/"; ~ 省略 ~ sub getLogFiles { my @tmpfiles = (); while (my $tmp = <${logDir}*>) { $tmp =~ s/^${logDir}//; if($tmp =~ /^\d{14}_\d+$/) { push(@tmpfiles, $tmp); } } ~ 省略 ~ } とあります。 サブルーチン内にある while (my $tmp = <${logDir}*>) { は変数を代入すると while (my $tmp = <msg/*>) { でしょうがそれでも意味が分かりません。 しらべても<>はファイルハンドラ以外の用途はあまり見かけません。 *の意味も正規表現か何かかとも考えましたがよく理解出来ません。 ちょっとわかりにくい質問かも知れませんが、 どうか宜しくお願いします。
- Win32でInputBoxを実装するには?
Win2000+ActivePerl 5.8.7 の環境です。 PerlでGUIということで、メッセージボックスであれば、次のようにして実現できました。 ------------ use Win32; my $msg = $ARGV[0]; my $icon = $ARGV[1]; my $caption = $ARGV[2]; my $result = Win32::MsgBox($msg, $ico, $caption); print "$result\n"; ------------ これと同様に、InputBoxのようなこと -------------------------------- ダイアログウィンドウを表示し、文字列の入力を促して、 Enterすると、スクリプト内の関数戻り値として、その文字列を 取得できるようなもの。 -------------------------------- が出来ないでしょうか。 ネット上色々と探し回ってみましたが、単純には見つかりませんでした。 ( Haven't yet implemented function inputbox...) 何か自分で組み合わせて作成する必要があるのでしょうか? (DOS窓経由であれば、単純に、$txt=<STDIN>; で取れるのですが) よろしくご教示ください。
- perl/tk のScrollbarについて
下のように縦にボタンを100個配置した場合、どのようにスクロールバーを設定するのですか?表現がまずいかもしれませんが、MainWindowの縦にスクロールバーを配置したいのですが、方法がわかりません。 -------------------------------------------------------- #!c:\perl\bin\perl.exe use Tk; $top = MainWindow->new(); #ボタン $button_1 = $top->Button( -text => "ボタン1",-command => \&filemake ) ->grid(); $button_2 = $top->Button( -text => "ボタン2",-command => \&filemake ) ->grid(); $button_3 = $top->Button( -text => "ボタン3",-command => \&filemake ) ->grid(); $button_4 = $top->Button( -text => "ボタン4",-command => \&filemake ) ->grid(); $button_5 = $top->Button( -text => "ボタン5",-command => \&filemake ) ->grid(); $button_6 = $top->Button( -text => "ボタン6",-command => \&filemake ) ->grid(); . . . $button_99 = $top->Button( -text => "ボタン99",-command => \&filemake ) ->grid(); $button_100 = $top->Button( -text => "ボタン100",-command => \&filemake ) ->grid(); MainLoop();
- perl/tkを使って作ったGUIを実行すると。。。
perl/tkを使って作ったGUIを実行すると、DOS窓が開いたままの状態です。 GUIを閉じるとDOS窓も閉じます。 GUIを実行中、DOS窓が開かないようにできないのでしょうか? perlのバージョンはv5.8.8。 osはxpです。
- amazonの商品を表示させるスクリプトの製作
「http://amanatu.com/」と言ったスクリプトをPerlで作りたいと思っているのですが、 何かamazonで特別な登録をしないといけないのでしょうか?ちなみに自分はアソシエイトIDは持っています。 よろしくお願いします。
- perlでchasen
perlで茶筅を使いたくてインストールしました。 茶筅単体では動くのですが、Text::ChaSenモジュールをインストールしても使えない状態です。 コマンドプロンプトで、perl -MText::ChaSen としても何も起こらず終了してしまい、プログラム中で使ってもuse Text::ChaSenの行でプログラムが強制終了してしまっているようです。エラーは特に出ません。 このような場合どのような原因が考えられるでしょうか? ご回答よろしくお願いします。
- 締切済み
- Perl
- meromeron3
- 回答数1
- もっとスマートに書きたい
テンプレートファイルがあり、そこにデータファイルから読み取ったデータを表示しようと思っています。 表示しようとしているデータは テーブルでセルがいくつかあるものです。 作ってみたのですが、もう少しスマートにかけないでしょうか。 データ: 1 2 3 4 5 テンプレート: <table> <!-- スタートする。カッコ内はセルの個数 --> <!--_START(4)_--> <tr> <td><!--_CONTENTS_--></td> <td><!--_CONTENTS_--></td> <td><!--_CONTENTS_--></td> <td><!--_CONTENTS_--></td> </tr> <!--_END_--> </table> プログラム: # @sample にテンプレートデータ # @data に データが入っています。 $kazu = @data; $flag = 0; foreach (@sample) { if (/<\!--_START\((\d+)\)_-->/) { $flag = 1; $sell = $1; } elsif (/<\!--_END_-->/) { $flag = 0; } elsif ($flag) { push(@kurikaesi,$_); } elsif (!$flag and $sell) { for($i=0;$i<$kazu;$i+=$sell) { $j = 0; @a = @kurikaesi; foreach $kuri (@a) { if ($kuri =~ /<\!--_CONTENTS_-->/) { $kuri =~ s/<\!--_CONTENTS_-->/$data[$i+$j]/g; print $kuri; $j++; } else { print $kuri; } } } $sell = 0; print; } else { print; } } 尚、テンプレートファイルの書式はこだわっていませんが、プログラムを分からないデザイナーに通すことを念頭においています。
- ベストアンサー
- Perl
- moon_night
- 回答数5
- このプログラムはどのような仕組みになっているのですか?
こんにちは毎度お世話になっております 2ch風の掲示板のcgiの改造をしているのですがこちらの所の解説をしていただきたいのですが・・・ #名前を変換してその値を返却 sub Convert_Name { my($convert,@cap,@capdata); $convert = $_[0]; open(FH,"dat/caplist.dat"); @cap = <FH>; close(FH); foreach $_ (@cap) { @capdata = split(/<>/,$_); if($convert =~ /$capdata[0]$/) { return $capdata[1]."</b> ★<b>"; } } $convert = trip($convert); $convert = fusianasan($convert); return $convert; } このサブルーチンはどのような役割を果たしているのでしょうか?
- Perlでテキストファイルの読み込み
Perl初心者ですがよろしくお願いします。 テキストファイルのデータを読み込んで簡単な計算がしたいのですが、うまくいきません。 data.txt ----------------------------------- 年月 固定電話 携帯電話 18年3月 10,000 15,000 18年2月 12,000 14,000 18年1月 11,000 13,000 17年12月 9,000 15,000 17年11月 9,500 14,000 #(同様に続く) ----------------------------------- 特定の月(例えば17年12月)から過去1年分の固定電話・携帯電話の個別合計とその総計。また、月ごとの合計を出したいのですが、どのようにすればよいでしょうか?ご教授願います。m(_ _)m
- ベストアンサー
- Perl
- mokomoko_mix
- 回答数4
- このプログラムはどのような仕組みになっているのですか?
こんにちは毎度お世話になっております 2ch風の掲示板のcgiの改造をしているのですがこちらの所の解説をしていただきたいのですが・・・ #名前を変換してその値を返却 sub Convert_Name { my($convert,@cap,@capdata); $convert = $_[0]; open(FH,"dat/caplist.dat"); @cap = <FH>; close(FH); foreach $_ (@cap) { @capdata = split(/<>/,$_); if($convert =~ /$capdata[0]$/) { return $capdata[1]."</b> ★<b>"; } } $convert = trip($convert); $convert = fusianasan($convert); return $convert; } このサブルーチンはどのような役割を果たしているのでしょうか?
- Perlでテキストファイルの読み込み
Perl初心者ですがよろしくお願いします。 テキストファイルのデータを読み込んで簡単な計算がしたいのですが、うまくいきません。 data.txt ----------------------------------- 年月 固定電話 携帯電話 18年3月 10,000 15,000 18年2月 12,000 14,000 18年1月 11,000 13,000 17年12月 9,000 15,000 17年11月 9,500 14,000 #(同様に続く) ----------------------------------- 特定の月(例えば17年12月)から過去1年分の固定電話・携帯電話の個別合計とその総計。また、月ごとの合計を出したいのですが、どのようにすればよいでしょうか?ご教授願います。m(_ _)m
- ベストアンサー
- Perl
- mokomoko_mix
- 回答数4
- テキストファイル内を行単位でAND検索し表示したい
perl初心者です。 フォームより受け取った複数の文字列をキーとして配列[@keywords]に格納し、 テキストファイル内を行単位でAND検索し結果を表示したいです。 OR検索は 検索対象文字が"a","b","c"の場合、$key = a|b|c と生成してうまく表示出来ているようなのですが、 AND検索をする場合はどの様に$keyを生成すればよいか教えて頂けないでしょうか。 よろしくお願い致します。 my $key = ""; if($option eq "or"){ #OR検索key生成 for(my $i = 0; $i < @keywords; $i++){ if($i != 0){$key = $key . "|";} $key = $key . @keywords[$i]; } else { #AND検索key生成 #ここの部分がどの様に書いたらいいかわかりません。 } #検索開始 my $result = ""; if (open(F, $SEARCH_FILE)) { if ($key !~ /^\s*$/) { while (<F>) { if (s|($key)|<font color="red">$1</font>|gi) { $result .= $_; } } #検索文字が見つからない時の表示 if ($result eq ""){ $result = "NOT FOUND" } } print "<pre>$result</pre>\n"; close(F); } else { #検索対象となるファイルが見つからない時のエラー表示 print "ERROR: Can't open '$SEARCH_FILE'\n"; }
- テキストファイル内を行単位でAND検索し表示したい
perl初心者です。 フォームより受け取った複数の文字列をキーとして配列[@keywords]に格納し、 テキストファイル内を行単位でAND検索し結果を表示したいです。 OR検索は 検索対象文字が"a","b","c"の場合、$key = a|b|c と生成してうまく表示出来ているようなのですが、 AND検索をする場合はどの様に$keyを生成すればよいか教えて頂けないでしょうか。 よろしくお願い致します。 my $key = ""; if($option eq "or"){ #OR検索key生成 for(my $i = 0; $i < @keywords; $i++){ if($i != 0){$key = $key . "|";} $key = $key . @keywords[$i]; } else { #AND検索key生成 #ここの部分がどの様に書いたらいいかわかりません。 } #検索開始 my $result = ""; if (open(F, $SEARCH_FILE)) { if ($key !~ /^\s*$/) { while (<F>) { if (s|($key)|<font color="red">$1</font>|gi) { $result .= $_; } } #検索文字が見つからない時の表示 if ($result eq ""){ $result = "NOT FOUND" } } print "<pre>$result</pre>\n"; close(F); } else { #検索対象となるファイルが見つからない時のエラー表示 print "ERROR: Can't open '$SEARCH_FILE'\n"; }
- テキストファイル内を行単位でAND検索し表示したい
perl初心者です。 フォームより受け取った複数の文字列をキーとして配列[@keywords]に格納し、 テキストファイル内を行単位でAND検索し結果を表示したいです。 OR検索は 検索対象文字が"a","b","c"の場合、$key = a|b|c と生成してうまく表示出来ているようなのですが、 AND検索をする場合はどの様に$keyを生成すればよいか教えて頂けないでしょうか。 よろしくお願い致します。 my $key = ""; if($option eq "or"){ #OR検索key生成 for(my $i = 0; $i < @keywords; $i++){ if($i != 0){$key = $key . "|";} $key = $key . @keywords[$i]; } else { #AND検索key生成 #ここの部分がどの様に書いたらいいかわかりません。 } #検索開始 my $result = ""; if (open(F, $SEARCH_FILE)) { if ($key !~ /^\s*$/) { while (<F>) { if (s|($key)|<font color="red">$1</font>|gi) { $result .= $_; } } #検索文字が見つからない時の表示 if ($result eq ""){ $result = "NOT FOUND" } } print "<pre>$result</pre>\n"; close(F); } else { #検索対象となるファイルが見つからない時のエラー表示 print "ERROR: Can't open '$SEARCH_FILE'\n"; }
- perl でファイル削除をごみ箱へ
perlでファイルを削除するとき、unlinkを使っていますが、ごみ箱に残って復活できるようにする方法はあるでしょうか?