Perlでリクに答えるスクリプトを作るスレ
at TECH
491:デフォルトの名無しさん
06/02/28 00:24:24
>>490
乙w死ねw
492:デフォルトの名無しさん
06/02/28 00:26:39
>>490
リアルで会ったら頭蹴り飛ばして殺してやるのにw
493:490
06/02/28 00:32:52
人格異常者だと思われてるから、普段リアルで誰にも相手されないよ〜
494:490
06/02/28 00:37:48
会社訪問した際、面接官に目が包丁のようだよと言われますた。
腹が立ったので、帰る際後ろから面接官の頭蹴り飛ばしてやりました。
電車に乗ると、たくさんのひとの頭を蹴り飛ばさなければならないので
怖くて乗れません。
495:490
06/02/28 00:39:55
別にいつ死んでもいいので、PG組んでます。
496:デフォルトの名無しさん
06/02/28 00:42:55
(;´д`)
497:デフォルトの名無しさん
06/02/28 00:45:32
世の中みんないい人ばかりじゃないしねぇ
498:490
06/02/28 00:46:15
ファイル内って書いてて答えがこれ?
C>RENAME *.gif *.bmp
死ね
499:490
06/02/28 00:53:16
491-495
で、だれ?おまえら
500:デフォルトの名無しさん
06/02/28 00:58:17
おれだよ、おれ
500
501:デフォルトの名無しさん
06/02/28 01:00:00
とりあえずここには
>>478以外、まともな人間はいなさそうだw
502:490
06/02/28 01:01:11
これ書いてる奴が?
% mv *.gif *.bmp
503:デフォルトの名無しさん
06/02/28 01:03:27
>>490
(;´д`) いや 話しかけてこないで。さよなら
504:デフォルトの名無しさん
06/02/28 01:45:20
ローマ字で入力すれば、あらゆるその読みの文字にマッチするスクリプト
gyouで行やら業やらぎょうやらギョウやらgyouやら
505:デフォルトの名無しさん
06/02/28 02:04:59
migemo
506:デフォルトの名無しさん
06/02/28 17:45:14
だってあれ完璧じゃないんだもん
507:デフォルトの名無しさん
06/02/28 18:53:11
>>506
migemo の「辞書」が完璧じゃないんだろ?
「辞書」をしっかり作れ。Perlでmigemoみたいなこと
をやるにせよ、辞書が命だ。
508:505
06/02/28 23:27:34
おまえも>503おまえも>506
死ね
509:デフォルトの名無しさん
06/03/01 17:08:44
>>508
うはwwwカッコヨスwwww
俺にも氏ねって言ってぇぇvvvvvv
510:505
06/03/02 04:09:38
>509
しねしねしねー♪从´∇`从
511:デフォルトの名無しさん
06/03/06 21:20:04
カウンターで
0=あ
1=1
略
49=を
50=ん
って感じに変換するにはどーすればいいんですか?
512:デフォルトの名無しさん
06/03/06 21:24:12
日本語でおk
513:デフォルトの名無しさん
06/03/06 21:33:41
>>511
my %c = (
'0' => 'あ',
'1' => '1',
# 略
'49' => 'を',
'50' => 'ん'
);
などと作っておいて $c{$count} のような感じで対応する文字列を求める。
514:デフォルトの名無しさん
06/03/11 00:49:18
>>1
楽天とかで任天堂DSを購入するスクリプト組んでくれよ。人力じゃ無理 買えないw
515:デフォルトの名無しさん
06/03/12 16:39:03
連投スクリプトください
516:デフォルトの名無しさん
06/03/12 16:52:43
#!perl
use LWP::Simple;
while (1) { get 'URLリンク(pc8.2ch.net)'; }
517:デフォルトの名無しさん
06/03/12 16:53:39
連投スクリプトください
518:デフォルトの名無しさん
06/03/12 16:54:45
連投規制、バーボンに引っ掛からない2ch投稿スクリプト希望
519:デフォルトの名無しさん
06/03/12 17:18:26
#!perl
use LWP::Simple;
while (1) {
get 'URLリンク(pc8.2ch.net)';
sleep 30;
}
520:デフォルトの名無しさん
06/03/12 17:40:11
明らかに悪用する気満々だから嫌。
521:デフォルトの名無しさん
06/03/12 17:47:13
スレを埋めるときに使うんです(><;)
522:デフォルトの名無しさん
06/03/12 18:49:39
スレ埋めは、自分でスクリプトを書ける者にのみ許される神聖なる儀式であルッ!!
523:デフォルトの名無しさん
06/03/12 18:51:08
思いっきり悪用の気配やんか
524:デフォルトの名無しさん
06/03/15 20:52:25
あんま調子にのんなよ
525:デフォルトの名無しさん
06/03/16 23:41:18
テキスト処理でおうかがいします。
半角数字と全角数字が混在したテキストがありまして、
一桁のみの数字は全角、二桁以上の数字は半角に統一したいのです。
中身を見てみると、「33」とか「679」とかになっていて、
どういう入力をしたのか不思議でなりません。
何かよいお知恵はないでしょうか。
Perl 5.8.1、Mac OS XのTerminalで作業をしています。
入力ファイルのエンコードはUTF-16(中国語処理のため)、
use utf8;で処理しています。
526:デフォルトの名無しさん
06/03/16 23:43:46
適当に正規表現で変換してったらいいんじゃないの?
s/1/1/
527:デフォルトの名無しさん
06/03/17 00:20:14
全部半角にしてから全角に直すだな
528:525
06/03/17 23:51:02
>>526
>>527
こんな感じで書いてみました。
while(<>) {
tr/[0-9]/[0-9]/;
s/(¥D)1(¥D)/$11$2/g;
(中略)
s/(\D)9(\D)/$19$2/g;
print;
}
ただ、これだと2回同じ処理をしないといけないですよね。
最初の処理でtr行、次の処理でs行になるんでしょうか。
これを効率よく1回の処理ですませたいのですが、いいやり方をご存知ないですか?
529:ヽ(´ー`)ノ ◆.ogCuANUcE
06/03/18 00:13:06
use utf8;
use Unicode::Normalize;
$str = NFKC($str);
$str =~ s/(?<!\d)(\d)(?!\d)/(my $ret = $1) =~ tr[0-9][0-9]; $ret/ge;
これでどうだろう。
530:デフォルトの名無しさん
06/03/18 17:46:30
>>528
逆。数字をまず全部全角にして、
その後2文字以上連続する全角数字を半角にする。
531:http://www.vector.co.jp/soft/win95/util/se072729.html
06/03/18 21:12:31
TextSS のWindowsXP(Professional)64bit化おながいします
もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
532:デフォルトの名無しさん
06/03/18 21:35:05
テキスト置換で64bitに対応してると
なんかいいことあんの?
533:デフォルトの名無しさん
06/03/18 22:40:20
>>531
マルチ + スレ違い乙
534:525
06/03/18 23:37:27
>530
ご指摘どうもありがとうございます。
他にも処理が山ほどあり、あまり時間がなくてテンパってました。
>529
うまくいきました。どうもありがとうございました。
こういうときに先読み・後読みを使うんですね。
教えていただいたものを流用して、
2桁のみ半角にすることもできました。
535:ヽ(´ー`)ノ ◆.ogCuANUcE
06/03/19 00:33:20
>>529 を書いて気が付いたんだが、Encode::JP::H2Z が変換できるのは
カタカナだけなんだな。
日本語処理で凝ったことしようと思ったら、Jcode なんかねぇ…。
536:デフォルトの名無しさん
06/03/19 03:25:47
>>532
読み込みの段階で64ビットは有利
537:デフォルトの名無しさん
06/03/19 09:25:18
うそつけ
538:デフォルトの名無しさん
06/03/22 21:16:20
>>528
「¥」と来たか。「\」ではないと。
539:デフォルトの名無しさん
06/03/29 06:15:44
すいません、リクです。
数字を有効数字の桁数で丸めるスクリプトを探しています。
例えば、round(数字, 桁数)の形で使うとすると、
round(-12345.067, 4)
round(-12345.067, 7)
round(0.0567, 1)
round(1234567890123456, 4)
は、それぞれ
-12350
-12345.07
0.06
1.235e+015
を返す、というようなものなんですが、どなたかお願いできませんか
540:デフォルトの名無しさん
06/03/29 12:19:00
最後の1つはprintfの%.3eでいいだろうし、上3つはMath::SigFigsのFormatSigFigsが
使えると思うから、値の範囲かなんかで場合分けしてそれぞれ食わせればいいんで
ないかな。
541:539
06/03/29 23:21:01
>>540
出来ました。どうもです。
あと、CPANを漁っていたらNumber::Formatに似たような機能をみつけたので、
これを改変してもうまくいきました。
sub round {
my ($number, $digits) = @_;
my $sign = $number <=> 0;
my $result = abs($number);
my $index;
if($number =~ /(.*)e(.*)/) {
$result = $1;
$index = $2;
}
my $precision = $digits - length(int($result));
if($result =~ /^0(\.0*)/) {
$precision += length($1);
}
my $multiplier = (10 ** $precision);
$result = int($result * $multiplier + 0.5000001) / $multiplier;
$result = -$result if $sign < 0;
$result *= (10 ** $index) if $index;
return $result;
}
542:デフォルトの名無しさん
06/03/32 03:59:17
$ip_sample = 222.4.xxx.xxx #フォームや環境変数から取得
$ip_data <<END_DATA; #外部ファイルから読み込んだデータ(実際は約2万4千行程度)
国名A-221.184.0.0-221.191.255.255
国名B-221.240.0.0-222.15.255.255
国名C-222.144.0.0-222.151.255.255
END_DATA
foreach (@ip_data) {
($cctld,$ip_a,$ip_b) = split(/-/,$_);
if ( 判定ルーチン ){$ans = $cctld
last;
}
}
print $ans;#この場合は"国名B"と表示したい
$ip_dataを参照して$ip_sampleの値が$ip_dataのどの行に在るかの判定を行い
$ansへ該当する$ip_deta行の$cctldを返すようにしたいのですが
判定方法でつまずいています。gethostxxx関数を使えという方向は無しにして
元の$ip_dataを増やさずに行える極力短い判定のルーチンを教示おねがいします
このテの質問はwebプでやれと言われそうな気がするけど質問の内容が
板を選ぶ以前のレベルの自覚があるので敢えてこちらに投下しまふ。
543:デフォルトの名無しさん
06/03/32 06:32:36
こういうパズル的なのはどこでも答えてもらえそう
my $target = "222.4.0.0";
my @iptable = qw( 国名A-221.184.0.0-221.191.255.255 国名B-221.240.0.0-222.15.255.255 国名C-222.144.0.0-222.151.255.255 );
$target = pack("C"x4, split(/\./, $target));
for(@iptable){
my($country, $from, $to) = split /-/;
$from = pack("C"x4, split(/\./, $from));
$to = pack("C"x4, split(/\./, $to));
if($from le $target && $target le $to){
print "$countryが範囲内でした\n"
}
}
544:デフォルトの名無しさん
06/03/32 06:34:47
ありがとうございます
早速走らせて見ます
実は・・・・
- foreach (@ip_data) {
+ foreach ($ip_data) {
ですた、阿呆ですんませんです・・・ orz
545:デフォルトの名無しさん
06/03/32 07:51:49
その2万4千行のデータの状態によっては物凄く処理速度に差が出そうだ。
データを読みながら1回から2万4千回判定するのがいいか、
全部配列に読み込んでおよそ5回判定するのがいいか。
546:デフォルトの名無しさん
06/03/32 07:54:50
違った。14回?
547:542
06/03/32 14:00:16
>>543
web鯖にはまだ置いてませんが手元の環境では問題なく動きました。
答えを教えてもらうと、なるほどなぁと納得行くのですが
その答えをせめて自分で作れるまでにはなりたいです。
ネットでも資料沢山あるけどラクダ本がほしくなったので
日曜日にでも街に探しにイッテキマス
目標は脱ド初心者w
>>545
できれば色々なパターンをベンチ取って一番軽い処理を使いたいですw
どうしても重かったらIP国別データを2〜3000行程度に分けて
IPの最初の8ビットを参照して呼び分けてみようかなと思ってますが・・・
548:デフォルトの名無しさん
06/03/32 20:14:29
>>547
アルゴリズムの勉強したほうがいいよ。
>>545-546でバイナリサーチに気づかないのはかなり重症
549:デフォルトの名無しさん
06/04/02 05:03:28
>>547
550:デフォルトの名無しさん
06/04/02 05:08:26
スマソ。書き込む前に送信してもうた・・・
>>547
IPをキー、国名を値にもつハッシュを作り、データベースクラスにtieしてみては?
2万4千行をメモリに持つのはつらいと思う。
551:550
06/04/02 05:38:58
ちょっと練習で書いてみた。IPは悩んだ末、強引に10進数に変換した。
my $data = <<EOF;
A-221.184.0.0-221.191.255.255
B-221.240.0.0-222.15.255.255
C-222.144.0.0-222.151.255.255
EOF
unlink 'test.db';
use Fcntl;
use DB_File;
tie my %db, 'DB_File', 'test.db', O_RDWR|O_CREAT, 0644, $DB_BTREE or die;
foreach(split/\n/, $data) {
my ($country, $from, $to) = split /-/;
for($from, $to) {
s/(\d+)\.(\d+)\.(\d+)\.(\d+)/$1*256**3+$2*256*256+$3*256+$4/e;
}
$db{$from-1} = 'N/A';
$db{$to} = $country;
}
untie %db;
sub find_country {
my $query = shift;
$query =~ s/(\d+)\.(\d+)\.(\d+)\.(\d)/$1*256**3+$2*256*256+$3*256+$4/e;
my $x = tie my %db, 'DB_File', 'test.db', O_RDONLY, 0644, $DB_BTREE or die;
my ($ip, $country) = ($query, 'N/A');
$x->seq($ip, $country, R_CURSOR);
return $country;
}
print find_country('221.239.0.1');
552:デフォルトの名無しさん
06/04/02 06:41:56
# IPアドレス→32bit整数
$ip = unpack('N', pack('CCCC', split(/\./, $ip)));
これで2倍くらいの速度になった
キャプチャが大きいんかなぁ
2個目のIPアドレス変換部分、最後が\d+じゃなくて\dになってたよ。
桁数が多いから計算ミスかと思ったけど、数字が文字列として尻についてただけなんだね。
553:デフォルトの名無しさん
06/04/04 17:06:58
>>552
use Socket; して inet_aton() 使ったら?
554:デフォルトの名無しさん
06/04/05 11:25:50
ベンチしたらinet_aton意外にとてつもなく遅いです。あとは
・「.」でばらすのはsplitより正規表現でキャプチャする方が速い
・4つの10進数から32bit整数にするのは、シフト>掛け算>pack-unpackの順で速い。
552の言うのとは逆の結果になったわけだがなんでかね?
Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds...
inet_aton: 5 wallclock secs ( 1.62 usr + 1.46 sys = 3.08 CPU) @ 425.97/s (n=1312)
multiple_re: 7 wallclock secs ( 3.26 usr + 0.00 sys = 3.26 CPU) @ 229803.99/s (n=749161)
shift_re: 3 wallclock secs ( 3.08 usr + 0.03 sys = 3.11 CPU) @ 274049.84/s (n=852295)
unpack_re: 3 wallclock secs ( 3.10 usr + 0.00 sys = 3.10 CPU) @ 183073.87/s (n=567529)
unpack_split: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 119672.52/s (n=374575)
555:デフォルトの名無しさん
06/04/05 11:26:39
use Benchmark;
use Socket qw(inet_aton);
my $ip_a = 100.100.100.100;
timethese(undef,
{
unpack_split => sub {
my $ip = unpack('N', pack('CCCC', split(/\./, $ip_a)));
},
unpack_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = unpack('N', pack('CCCC', $1, $2, $3, $4));
},
multiple_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = $1*256*256*256 + $2*256*256 + $3*256 + $4;
},
shift_re => sub {
$ip_a =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
my $ip = $1 << 24 + $2 << 16 + $3 << 8 + $4;
},
inet_aton => sub {
my $ip = inet_aton($ip_a);
},
}
);
556:デフォルトの名無しさん
06/04/05 12:29:42
すまん、どうにも直観と反する結果なのでさらに調べていたらなんのことはない
my $ip_a = 100.100.100.100;
になっていたorz... もちろん正しくは
my $ip_a = '100.100.100.100';
なのでベンチ取り直した。
Benchmark: running inet_aton, multiple_re, shift_re, unpack_re, unpack_split for at least 3 CPU seconds...
inet_aton: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 267949.37/s (n=846720)
multiple_re: 3 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @ 69144.94/s (n=218498)
shift_re: 4 wallclock secs ( 3.11 usr + 0.00 sys = 3.11 CPU) @ 74248.87/s (n=230914)
unpack_re: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 68071.03/s (n=218508)
unpack_split: 2 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 95474.76/s (n=298836)
まとめ:
inet_atonはやっぱり速いので、自分で書くのはやめよう。
557:デフォルトの名無しさん
06/04/05 13:42:14
v文字列以外では
・ inet_atonはpackしたIPアドレス("100.100.100.100"なら"dddd")を返すのに、他は整数(1684300900)を算出している。
・ "+"演算子は"<<"演算子より優先度が高いため($1 << 24)とカッコで括らなければならない。
一応 sub getRandIPString { join '.', int rand 256, int rand 256, int rand 256, int rand 256; } といったものを用意して
全てバイナリ文字列を出力するコードにしてからベンチ取ったけど、inet_atonが常に1位だった。
今更だけど、後で直接比較可能にするための前処理として保存しとけば速度関係無かったね。
558:デフォルトの名無しさん
06/04/19 06:59:49
Mac OS XでPerlを使っています。
Macで作成したテキストを処理したいのですが、改行コードがCRになるのでうまく処理できません。
LFでないため、全て1行として認識されてしまいます。
標準入力を常にLFとして読み込んだ後、それに対してマッチや置換を行いたいのです。
以下のように書いてみましたけどダメでした。
while (<>) {
s/\x0D\x0A|\x0D|\x0A/\x0A/g;
if (/aaa/) {
print;
}
}
出力されたデータはLFになりましたが、マッチはうまくいきませんでした。
何かいいやり方はないものでしょうか。
559:デフォルトの名無しさん
06/04/19 09:14:57
求めてるのは<>使う前の $/ = "\x0D"; か /aaa/m あたりかも
560:558
06/04/19 19:51:43
>559さん
入力時の区切り文字をCRに決めてやればいいんですね。
解決しました。ありがとうございました。
561:デフォルトの名無しさん
06/04/19 23:24:22
すいません。行のナンバリングをリクエストしてもよろしいでしょうか。
あいうえお(段落1)
かきくけこ(段落2)
さしすせそ(段落3)
たちつてと(段落4)
なにぬねの(段落5)
はひふへほ(段落6)
という文章があって、これを、
1:あいうえお(段落1)
2:かきくけこ(段落2)
3:さしすせそ(段落3)
1:たちつてと(段落4)
2:なにぬねの(段落5)
3:はひふへほ(段落6)
のように空行をはさんで新たにナンバリングを開始したいのですが方法が思い浮かびません。
562:デフォルトの名無しさん
06/04/19 23:59:01
言いたいことが分からんが新たにナンバリングを開始したいところで
ナンバリング用の変数を初期化して空行を出力するだけじゃないのか?
563:デフォルトの名無しさん
06/04/20 02:27:54
>>561は、単純にすべての行に通し番号でナンバリングするプログラムは作れるのか?
564:561
06/04/20 23:04:01
>563
あっ、はい。
my $i = 0;
while (<STDIN>) {
if (/^./) {
print ++$i;
print ": ";
print;
}
}
ちょっと冗長ですけど。
565:デフォルトの名無しさん
06/04/21 00:11:57
うーん、、、自分で作りたい?それとも誰かにサクッと作って欲しい?
566:デフォルトの名無しさん
06/04/21 10:46:46
>>564
そこまでかけるなら
else で $i = 0; を書けないか?
567:デフォルトの名無しさん
06/04/21 10:55:29
空行が来たらカウントをリセットする、というと、こんな感じ?
$n = 1;
while (<>) {
$n = 1 if (/^\s*$/
print "$n: $_";
$n++;
}
568:デフォルトの名無しさん
06/04/21 10:58:13
あ、閉括弧とか忘れた。まあいいや。脳内で修正してくれ。
569:561
06/04/21 22:35:44
>566
elseを使っても結果が変わらないんです。
マッチがヘボいんでしょうか。
>567
実行させると入力がぶっとんでしまいました…
>565
いろいろ試してみたのですが、自分の力ではムリっぽいです…
あつかましいとは承知していますが、作っていただくと助かります。
570:561
06/04/22 19:48:05
出来てしまいました!
my $i = 0;
while (<STDIN>) {
if (/^..+/) {
print ++$i;
print ": ";
print;
} else {
$i = 0;
print;
}
}
else文で「my $i = 0;」にしていたのがまずかったようで、
空行になっても$iが初期化されなかったみたいです。
レス下さったみなさん、ありがとうございました。
おさわがせしました。
私ってPerlの才能ないのかな…
571:デフォルトの名無しさん
06/04/23 05:53:25
>>570
完成おめ!
才能がどうかは知らないけど、結局経験じゃないですかね?
俺も本スレで叩かれたりしながら勉強してますw
一応俺が用意してたスクリプト貼っておきます。。。
use strict;
my $c = 1;
open IN, 'filename';
while (<IN>) {
(/^$/) ? $c = 1 : print $c++ . ':';
print;
}
close IN;
572:561
06/04/23 12:42:55
>571
ありがとうございます。
自分のはだいぶ冗長だと思うので、用意していただいたスクリプトを参考にさせていただきます。
今自分の書いたものを見直してみると、if (/^./)でいいですよね...
恥ずかしい...
573:デフォルトの名無しさん
06/04/23 14:49:38
>>570
myはローカル変数の宣言。単なる代入では無いよ。
myを使うと、同名の新たな一時変数を作る事になる。
んで、詳しい条件は忘れたが、ブロック抜ける時とかに消える。
長いコードになると
「この変数名って他で使われて無かったっけ…?」
ってなるけど、my使えばそんな心配が減るワケ。
574:デフォルトの名無しさん
06/04/23 18:39:57
>>558
>>560では解決しちゃったみたいだけど、これ俺も知りたい。
コマンドラインから入力されたテキストの改行コードをLFに統一、
という前処理をしてからwhileループ処理をかますってできるのかな?
あんまりセパレータとか変えたくないんで。
575:デフォルトの名無しさん
06/04/23 21:25:04
>>574
>セパレータとか変えたくない
なんで?
576:デフォルトの名無しさん
06/04/23 22:10:27
>575
セパレータも一文字として認識されてしまわない?
回避する方法があればいいんだけど。
577:デフォルトの名無しさん
06/04/23 23:08:11
認識できるから区切れるんだが。
いまいち言いたいことが分からん。
578:デフォルトの名無しさん
06/04/23 23:40:26
メタキャラ「.」って改行を除く一文字にマッチするじゃん。
でも「.」もCRにマッチしちゃわね?
LF読み込むときと処理が変わっちゃうからイライラすんだよね。
579:デフォルトの名無しさん
06/04/24 00:10:50
自分の都合に合わせてセパレーター変えるなり置換するなりすりゃいいじゃん。
580:デフォルトの名無しさん
06/04/24 03:57:29
あーいう変数ってlocal出来ないっけ?
581:デフォルトの名無しさん
06/04/24 23:15:36
whileで読み込む前に処理しとくって、
できないってことでおk?
582:デフォルトの名無しさん
06/04/25 04:35:21
質問は質問スレ行け
583:デフォルトの名無しさん
06/05/01 22:52:12
Win32::GUI::ListView ソートメソッドないじゃん・・・orz
た・・・す・・・け・・・て・・・・
584:デフォルトの名無しさん
06/06/15 22:54:05
りすとびゅーか...
なにもかもがな・・つ・・か・・し・・ぃ・・
585:デフォルトの名無しさん
06/06/16 20:37:02
一瞬、不治痛の電子帳票ソフトかと思った
586:デフォルトの名無しさん
06/07/09 11:10:16
初めまして。
浅知恵で掲示板の改造を試みています。
オートリンク機能付き掲示板に記事修正機能を追加したのですが、
記事修正をするたびに、文中にあるリンク先が
<A href=URLリンク(www.a.b.c)<) target=_blank>
URLリンク(www.a.b.c<)
と、タグが無制限に追加されていきます。
そこでお願いしたいのは、
記事修正時にファイルに保存されているデータ
----------------------------------------------
<A HREF=URLリンク(www.a.b.c)<)
----------------------------------------------
を一端
----------------------------------------------
URLリンク(www.a.b.c)
----------------------------------------------
というデータに戻すサブルーチンを作成したいのですが、
行き詰まっています。
よろしくお願いします。
オートリンク機能のスクリプトは以下の通りです。
***************************************************************
#オートリンク
sub auto_link {
my($msg) = $_[0];
$msg =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=$2 target=_blank>$2<\/A>/g;
return $msg;
}
587:デフォルトの名無しさん
06/07/09 11:15:33
↑ ありゃ、文字がおかしい。
全角にしてありますが、Aタグです。
URLリンク(www.a.b.c) の後ろは、</A>
588:デフォルトの名無しさん
06/07/10 01:11:44
そういう時は表示時にオートリンクを適用すればいい。
保存時にいじっちゃうと後でいじりにくくなるというのは定説。
ファイル構造上、改行の置換とかは仕方無いと思うけどさ。
589:デフォルトの名無しさん
06/07/10 10:01:41
>>586
ようするに、すでに<A>タグ化されている部分を除外すればいいわけだな?
590:デフォルトの名無しさん
06/07/10 10:03:49
ああ、ごめん。>>586にいての>>588の意見を読んでなかった。
確かに保存時は生データのまま記録し置いて、閲覧時に
http:なんた
591:デフォルトの名無しさん
06/07/10 10:06:04
>>590
途中で送信しちゃった。
保存時は生で。閲覧時は「http:なんたら」の条件で抽出→<A>タグ化のほうが効率的だね。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4358日前に更新/217 KB
担当:undef