【Perl】初心者コーナー Part18
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/20 22:04ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0497nobodyさん
02/12/18 01:31ID:1Ah7QOiOHOGE
までの中で計算する方法ってなにか無いのでしょうか?
0498nobodyさん
02/12/18 01:49ID:cSfhj2ax夜も更けて参りましたので今宵はお休み下さい。
0499496
02/12/18 02:01ID:???そうですか、ではまた明日伺います。お休みなさい。
0500nobodyさん
02/12/18 03:35ID:???【Perl 】初心者コーナーPart5
http://corn.2ch.net/php/kako/988/988728069.html
ここの256あたりからやり方が書いてあるよ。
0501nobodyさん
02/12/18 04:29ID:???それはスクリプトの中に書くものではなく、コマンドラインから実行するもの。
スタート>プログラム>MS-DOS プロンプト(またはコマンドプロンプト)
C:\WINDOWS>cd デスクトップ
C:\WINDOWS\デスクトップ>perl -e "s/aaaa/bbbb/g;" *.txt
0502nobodyさん
02/12/18 06:19ID:+CI84VDc@a = sort {$a cmp $b} @a;
print @a;
実行すると、一三四二 となります。
漢字の数字って、どうやって並べるの?
できればこれを 一二三四 にしたいんだけど、
どうすればいい?
0503nobodyさん
02/12/18 08:24ID:???漢数字は、漢字コード上では順番に並んでないから、ソートできないよ。
通常は普通の数字で処理して、表示するときに漢数字に変換するといい。
0504nobodyさん
02/12/18 11:45ID:8xOlQixN処理にいささか困ってます。送信フォームから来る情報は
検索文字 and検索(ラジオボタン)にするか 検索ファイル(チェックボックス) です。
and検索にするかと検索ファイルは情報が可変長なので困っています。
このような場合は受け取った情報を一つずつ解析していくのがベストなのでしょうか?
検索という性質上、0.1秒でも処理を早くしたいのでベストな手順を
教えていただけないでしょうか。お願いします。
0505nobodyさん
02/12/18 11:48ID:???0506nobodyさん
02/12/18 12:27ID:???0507nobodyさん
02/12/18 13:44ID:dss5kZ4mとやっても全角スペースが消せません。sjis
簡単な正規表現か何か希望。
\Q\Eつけても、一時的にEUCにしてもだめでした。
いい正規表現かなにかないですか?
0509トリップはマイクロソフト ◆lKiTB20t66
02/12/18 16:55ID:9mUf2zGi配列の任意の場所に値を入れたらそれ以降をずらしてくれる
関数有りますか?
ex.
[a][b][c]
[b]と[c]のあいだに[x]を入れると
[a][b][x][c]
こういう風なイメージです。こんなのありますか?
0510nobodyさん
02/12/18 16:58ID:???0511トリップはマイクロソフト ◆lKiTB20t66
02/12/18 17:00ID:9mUf2zGiいえいえ単次元配列で構いません
配列に値を入れたらそれ以降がずれてくれれば
それで構いません
0512nobodyさん
02/12/18 17:17ID:???s/"活動内容",//;
のように消去させると
<AD><A1>
のようなへんなコードが出来てしまいます。
日本語を安全に置換するにはどうすればいいでしょうか?
0513いきぬきを
02/12/18 17:26ID:xIqy3Dxbダウンロード 世界標準
http://www.kisslovetoco.com/
0514bloom
02/12/18 17:30ID:fboSAjfAhttp://www.agemasukudasai.com/bloom/
0515nobodyさん
02/12/18 17:39ID:???splice
0518nobodyさん
02/12/18 18:12ID:R82phE4X#! Perlのフルパス
を書くことによりファイル名を指定するだけで実行できるというのはLinuxでは出来ないのでしょうか?
0519nobodyさん
02/12/18 18:32ID:???コンパイラー、リファレンスの情報が探しても見つかりません。
ご存じの方はいらっしゃらないでしょうか?
0521518
02/12/18 19:08ID:R82phE4X実行権限を与えないと
Permission denied
の警告が出るんですよね?
実行権限を与える前も与えた後も
そんなコマンドねえよハゲみたいなメッセージがでるんです。
どうしたものでしょうか。
0523nobodyさん
02/12/18 22:06ID:???0524496
02/12/19 00:44ID:Duvh3oq4さっそくプロンプト上で同じコマンドを打ち込んでみたのですが、
なぜかそんなファイルはないというエラーがでました。
試しに存在するファイル名を直接打ってみると、これは動作しました。
ワイルドカードが効かない原因はなんなのでしょうか。
0525nobodyさん
02/12/19 06:29ID:ZsaWrRnVどうやら仕様が変更されて読み込めない。。。
Windowsでは(というかWindows標準のコマンドシェルでは)ワイルドカードは無意味だからね。
Googleで「Perl Windows Wildcard」で探してみるといい。
>>525
dbmopenは、インストールしてあるDBMモジュールから使用できるものを
動的に選ぶ仕様だから、5.6の方に標準以外のDBMモジュールをインストールしたなら
5.8にも同じモジュールをインストールしてみるといいかもしれない。
まぁ、仕様が変わったのかもしれないけど。
0528496
02/12/19 13:52ID:???なるほど、そうだったんですね。どうりでできないはずです。
perl windows wildcardやActive perl wildcardなどで
ググってみましたが、日本語サイトでは諦めている人の
情報しかありませんでした。
英語サイトを見ると解決法があるかなあ、
ここを見ろというサイトがありましたらどなたか教えて頂けませんか。
http://www.google.co.jp/search?q=perl+windows+wildcard&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
この一番上の"jperl"というタイトルのページで紹介されている"Wildcard.pm"なんてどうかな。
使い方は
perl -MWildcard script.pl *.txt
という感じで。
または、CPANにあるWin32::Autoglobでもいいね。
0530496
02/12/19 16:11ID:???ありがとうございます、ばっちり走りました!
実はwildcard.pmはDLしていたのですが、使い方の説明も
書いてなかったので、どうしていいか分からなかったのです。
インストール先も分からなかったのですが、フォルダを覗いていたら
libフォルダに.pmファイルがたくさんあったので、入れてみたら正解
だったようです。
3日渡りお世話になりまして、皆さんありがとうございました。
0531518
02/12/19 17:17ID:gnHgtnzEありがとうございます。
やってみましたところそれでも
command not found
となってしまいます。
Perlのパスはtype -a perlで表示されたものでいいんですよね?
ちゃんとファイルの先頭に「ドットスラッシュ」を書いてください。
ファイルネームだけだとコマンドパス(/binとか/usr/binね)にあるコマンドのみを探します。
0533518
02/12/19 18:34ID:gnHgtnzE./ファイル名 と打ち込むのでいいのですか?
それでもやっぱり駄目ですね・・・。
どこかおかしいのかもしれないです。
0535518
02/12/19 19:10ID:gnHgtnzEPerl ファイル名 だとちゃんと動作します。
保存してあるディレクトリに移動して
#! Perlのパス や ./ ファイル名 では command not foundとなります。
0536nobodyさん
02/12/19 19:23ID:sSjdESWgっていうのを作ってほしいな・・
鬼のようなコードになってる。。
0537nobodyさん
02/12/19 19:49ID:???同じことをやるにしても、あのコーディングは凡人にはできない。
解析ガンバレ>536
0538nobodyさん
02/12/19 20:27ID:???ビビッタ
0539nobodyさん
02/12/19 21:25ID:???0540nobodyさん
02/12/19 22:58ID:SoXwX8I8http://www.yakin.cc/ch2.gif
0541nobodyさん
02/12/19 22:59ID:lw7wMpYEhttp://petitmomo.com/mm/
ここがちょっぴりエッチ系のめぐが運営している出会いサイトです。
もしよかったら使ってみて、、、
ヨロシクです。
めぐ(^o^)-☆
0542nobodyさん
02/12/19 23:14ID:ZsaWrRnVmother
hanako
father
taro
grandfather
kenzo
grandmother
hana
上記のようなテキストファイルがあります。
これを奇数番目をキーとし、偶数番目を値とする連想配列にしたいのですがどうしたらいいでしょうか?
つまり、
motherは、hanako
fatherは、taro
grandfatherは、kenzo
grandmotherは、hana
としたいのです。ご教授ください。
0544nobodyさん
02/12/19 23:31ID:sSjdESWg1.
%hash = map {
return chop($_);
} <TEXT>;
2.
while (<TEXT>) {
my $key = $_; chop($key);
my $value = <TEXT>; chop($value);
$hash{$key} = $value;
}
もうちょっとまともな手段で改行文字を消すこと。
0545nobodyさん
02/12/19 23:37ID:sSjdESWg0546nobodyさん
02/12/19 23:37ID:???はちょっと不親切のような気がする。
>>544
はちょっと冗長な気がする。
俺なら。
# ファイルを取得してリストに入れる。
open (IN, 'file.txt');
@line = <IN>;
close (IN);
# リストの全ての要素から、末尾の改行を取る。
chomp @line;
# そのまま代入する。
%hash = @line;
こんなもんかな。
0547修正版
02/12/19 23:42ID:sSjdESWgchop($_); $_;
} <TEXT>;
0548nobodyさん
02/12/19 23:44ID:sSjdESWgこう書いたほうが面白いと思って・・・
0550nobodyさん
02/12/20 00:01ID:LLjHcAeKあと、新バージョン。どちらかが空行で終了
while ((my $key = <> ) ne '' and (my $value = <>) ne '') {
chop $key, $value;
$hash{$key} = $value;
}
もしかしたら、ご希望の品はこっちかも。空行をkeyにしない
while (<TEXT>) {
chop;
next if ($_ eq '');
my $key = $_;
my $value = <TEXT>;
chop($value);
$hash{$key} = $value;
}
0551nobodyさん
02/12/20 00:03ID:???0552542
02/12/20 00:07ID:???>>550さんのも試してみます!ただ、例外処理は特に考えなくて良いんです。
みなさん、ありがとうございました!
0553544=547=550
02/12/20 00:15ID:???そのあたりも考えて使ってね...
冗長とか言われてるけど。。
0554nobodyさん
02/12/20 00:26ID:???0555nobodyさん
02/12/20 00:38ID:Av7thQVnそのサーバ上にあるアカウントとそのアカウントパスワードで
認証させるにはどうすればいいんでしょうか?
0556nobodyさん
02/12/20 00:40ID:Av7thQVn0557nobodyさん
02/12/20 00:47ID:???http://www.hoge.co.jp/index.html //comment
のように投稿者が書いた場合、//commentの部分の色を変えたいの
ですが、どのようにしたらいいのでしょうか?
正規表現を使って、取り出した文字列をタグで挟んだ形にしてやるという
ことはわかるんですが、 //commentの部分の取り出し方がわかりません。
お教え願えないでしょうか。お願い致します。
0558nobodyさん
02/12/20 01:03ID:???perl -pe 's{\s(//.*$)}{ <tag>$1</tag>}'
http://www.example.com/index.html <tag>//comment</tag>
で、どうでしょ。
0559nobodyさん
02/12/20 01:03ID:iYZ6MU3U$str =~ s|([\s]+)(//[\S]+)|$1<tag>$2</tag>|g;
$str =~ s|^(//[\S]+)|<tag>$1</tag>|g;
こんな感じかしら。
正規表現苦手。
0560nobodyさん
02/12/20 01:42ID:4aAUDwG2レスありがとうございます。
んー、どうもうまくいかないです。
$value =~ s~([\s]+)(//[\S]+)~$1<span class="comment">$2</span>~isg;
$value =~ s~^(//[\S]+)~<span class ="comment">$1</span>~isg;
と記述してみましたが変化なしです。
どうもとりだせてないようです。
^(//[\S]+)の部分を書き換えると部分的には色が変わるのでタグはあってるんですが。
どこに問題ありでしょうか?
0561nobodyさん
02/12/20 02:00ID:p0zZgi4w0562nobodyさん
02/12/20 02:11ID:???$value =~ s/(?<!http:)(\/\/.+)$/<a>$1<\/a>/;
0563nobodyさん
02/12/20 02:11ID:4aAUDwG2ありがとうございます〜。
できましたー。これで今日はゆっくり寝られます。
>>558さん >>559さん >>561さん
ご協力ありがとうございました。
0564nobodyさん
02/12/20 02:18ID:4aAUDwG2レスありがとうございます。
なるほど、こういうふうにすればいいんですね。
バッチリです。勉強になりました。
ありがとうございました^^。
0566nobodyさん
02/12/20 11:52ID:???スクリプトを組みたいのですが、出来る限り動作の軽い物にしたいと思っています。
単純に
if(-e $ARGV[0]){
print "ok";
}else{
print "no";
}
のようにしようと思っていたのですが、-eでは他のホストのものは
調べられないそうですね。
他のホストを調べられ、かつ軽くする方法はありますか?
0567566
02/12/20 11:56ID:???それをイントラのweb上で、formにファイル名入れて確認させる形にするつもりです。
ので、実際には$ADGV[0]とかにはならないと思います。
0570nobodyさん
02/12/20 12:51ID:kZj4R1Az添え字で指定したいのですが、
ループ処理で何番目かを自分で取得するしかないんでしょうか
0571nobodyさん
02/12/20 13:13ID:???まえにココで、質問したのですが、
いま、過去ログに行っていて読めません。
もう一回質問します。
ディレクトリにある全てのファイルから
最後の3行を取り除くのにはどうすればいいでしょうか?
始めの3行ならば
% perl -ne 'print unless 1..3;' *.txt
でいいはずです。
0574nobodyさん
02/12/20 14:14ID:???ファイル読み込み
N=行数カウント
1..(N-3)まで出力
こんなスクリプトで我慢汁!
0575nobodyさん
02/12/20 14:34ID:???谷口 腕太 タニグチ ワンタ 1977年生まれ
を
谷口 腕太,タニグチ ワンタ,1977年生まれ
に置換したいです!!!
"2つめの全角スペース"→","
"4つめの全角スペース"→","
という風に置換するにはどうすればいいのでしょうか?
そんなことできますか??
0576570
02/12/20 14:51ID:kZj4R1Azありがとん
ループでやってるとさすがにコードが長くなるんで
助かったわ〜
0577nobodyさん
02/12/20 15:01ID:N/iHD9mS$test = jcode($test)->jis;
print jcode($test)->mime_encode;
はできるのに、
my $test="入力テスト";
print jcode($test)->jis->mime_encode;
すると、
Can't locate object method "jis" via package "NO%F%9%H"
って怒られる。
なぜ?
0579nobodyさん
02/12/20 17:03ID:AHOklkZ9<option>
<option selected value=$data[1]>$out[0]
<option value="0">yes
<option value="1">no
<option value="2">ok
</select>
$data[1]には0,1,2が入っていて
$out[0]にはyes,no,ok が入っています。
これを画面表示させると(仮に$data[1]=1,$out[0]=noとする)
______
|no | ←当然ながらここに<option selected value=$data[1]>$out[0]
|yes |
|no |
|ok |
~~~~~~
こんな感じで画面にでてしまうんですが。
これをfor文でまわして同じヤツは表示しないで
($data[1]=1,$out[0]=no)のときだったらselectedをつけて表示させる
______
|yes |
|no |←ここに<option selected value=$data[1]>$out[0]
|ok |
~~~~~~
こんな感じでやるにはどうしたらいいんでしょうか?
0581579
02/12/20 17:26ID:AHOklkZ9ってことです。
あと
$out[0]にyes,no,ok のどれか1つが入っている。
ってことです。
書き方がおかしくてすみません
0582nobodyさん
02/12/20 17:29ID:???それをテキストファイルとして出力するスクリプトを組んだところ、
コマンドラインから実行すると問題なく動くのですが、
phpなどから呼び出すと、out of memoryとなってしまいます。
止まるは常に同じところなのですが、一体何が原因なのでしょうか?
phpからは
system ("hogehoge.pl $a $b $c");
というように動かしています。
$a等は、formのtype=textで指定するようになっていて、
pl側で表示させて、問題なく渡せていることは確認できたのですが・・・
0583nobodyさん
02/12/20 17:31ID:???どう見てもPerlに見えないけど・・・
スマートじゃないがこんな感じ
@chknum = (0,1,2);
@chkstr = ('yes','no','ok');
$data[1] = 2;
$out[0] = "no";
$chkflg = 1;
for($i = 0 ; $i < 3 ; $i++) {
if($chknum[$i] == $data[1] && $chkstr[$i] eq $out[0]) {
$selected = "selected";
$chkflg = 0;
}
else {
$selected = "";
}
$outstr[$i] = "<option " . $selected . " value=" . $chknum[$i] . ">" . $chkstr[$i] . "\n";
}
if($chkflg) {
print "<option " . $selected . " value=" . $data[1] . ">" . $out[0] . "\n";
}
for($i = 0 ; $i < 3 ; $i++) {
print $outstr[$i];
}
ちなみに難しい処理は一つも無い・・・聞く前に自分で考えてみたのか?
0584nobodyさん
02/12/20 18:04ID:???具体的には
/home/user1/user.pass に htpasswdで暗号化したのをアップしてもらって
user1で認証しようとした場合
/home/user1/user.pass をパスワードファイルに読み込みたいのですが...
0585bloom
02/12/20 18:18ID:V4mJQRW4http://www.agemasukudasai.com/bloom/
0588579
02/12/20 20:35ID:AHOklkZ9どうもありがとうございました。
私はIDにAHOと出るくらいアホなんで
こんなのもわからないんです。
0589579
02/12/20 20:41ID:AHOklkZ9print "<option " . $selected . " value=" . $data[1] . ">" . $out[0] . "\n";
}
あと、この部分は何のためにあるんですか?
0590nobodyさん
02/12/20 20:54ID:Av7thQVn特定のディレクトリのサイズを取得するためにはどうすればいいんでしょうか?
unixプログラムならduで一発なんですが
setuidなもんで外部プログラムがうまく動かないっス
0591nobodyさん
02/12/20 21:00ID:mZ5RE2AI>>540
よろしくお願いします、、
0592nobodyさん
02/12/20 21:09ID:???0593fg
02/12/20 22:02ID:1ptZgAGxthe errors. Depending on the server configuration, you can also run this script under CGIWrap
debugging. Usually, either rename or link the script temporarily to a file which ends with .cgid
extension, or add a AddHandler cgi-script-debug .cgi line to your .htaccess file
このエラーはいったいなんでしょうか?
解読出来ませんでした。
imgboard v1.22 R6 です。
0594571
02/12/20 22:32ID:???聞いて
0595571
02/12/20 22:32ID:???■ このスレッドは過去ログ倉庫に格納されています