[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 03/05 22:17 / Filesize : 217 KB / Number-of Response : 841
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlでリクに答えるスクリプトを作るスレ



1 名前:(・∀・)チンポー!! mailto:(・∀・)チンポー!! [04/06/02 11:39]
perl書きなんだがさ、こうリクに答えてなんか作りたいんだ。
だからリクエストをくれ。

331 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 11:16:32 ]
どうでもいいけど、毎問メールアドレスを入力させられんの?


332 名前:デフォルトの名無しさん [2005/11/29(火) 11:37:19 ]
設問ごとの得点表を

%SCORE_TABLE = (
Q001 => { 1 => { rika => 2, rekishi => 2 },
2 => { rika => 2, rekishi => 1 },
....
},
....
}

という形で用意する。

cgi入力のうち、QNNNに対応する値を%input = (Q001 => 2, Q002 => 1 ,... )
という形のハッシュにまとめる。

あとは

while (my($q, $a) = each %input) {
while (my($k, $s) = each %{$SCORE_TABLE{$q}->{$a}}) {
$score{$k} += $s;
}
}

とまわせば%scoreにそれっぽい結果が得られるだろう。


333 名前:329 [2005/11/29(火) 11:38:26 ]
>>331
ううん、メアドを登録しなかったらしなかったで得点表示のみのページのみ
出力されて、メアド登録したら、直接SENDMAILで詳細結果が
メールで届くようにするよ。

334 名前:329 [2005/11/29(火) 13:08:49 ]
>>332
非常にありがたいんですが、原始的な組み方で

if ($moji{Q001} == 1) {
$rika += 2;
$rekishi += 1;}
elsif ($moji{Q001} == 2) {
$rika += 0;
$rekishi += 0;}
elsif ($moji{Q001} == 3) {
$rika += 0;
$rekishi += 0;}
elsif ($moji{Q001} == 4) {
$rika += 0;
$rekishi += 0;}
elsif ($moji{Q001} == 5) {
$rika += 0;
$rekishi += 0;}

335 名前:329つづき↑ [2005/11/29(火) 13:09:10 ]
にして、最終的にその結果から

if ($rika == 1) {$rikaTEXT = 'rika1点かな';}
elsif ($rika == 2) {$rikaTEXT = 'rika2点かな';}
elsif ($rika == 3) {$rikaTEXT = 'rika3点かな';}
elsif ($rika == 4) {$rikaTEXT = 'rika4点かな';}
else {$rikaTEXT = 'rika不明かな';}

if ($rekishi == 1) {$rekishiTEXT = 'rekishi1点かな';}
elsif ($rekishi == 2) {$rekishiTEXT = 'rekishi2点かな';}
elsif ($rekishi == 3) {$rekishiTEXT = 'rekishi3点かな';}
elsif ($rekishi == 4) {$rekishiTEXT = 'rekishi4点かな';}
else {$rekishiTEXT = 'rekishi不明かな';}

そしてこのスコアから判断されたメッセージをHTML出力するとき

$rikaTEXT<BR>
$rekishiTEXT<BR>


でいいのかな?このままの構成を残して訂正しなきゃならない部分を教えてください。
これで実行してもrikaのスコアしか表示されなくて、rekishiのスコアは表示されません(T_T)


336 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 19:04:01 ]
鬱陶しいなあ。
まったく理解できないのに偉そうなことばかり。
もうどこかに委託しろよ。

337 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 20:50:31 ]
>>336
まあまあ、あまり怒りなさんな。
オレはこの調子で100問分書いたスクリプトというものをぜひ拝見したい。

>>335
最後の部分をこんな風に書いたんじゃないの?
---------------------------------
print "$rikaTEXT<BR>
$rekishiTEXT<BR> ";
---------------------------------
それなら、こうするとうまくいくよ。
print "$rikaTEXT<BR>\n$rekishiTEXT<BR> ";

あと、スクリプト完成したらぜひ公開きぼ〜ん。

338 名前:デフォルトの名無しさん [2005/11/29(火) 23:18:59 ]
>>337
ありがとう。見せたいとこだけど、
ごめんよー

339 名前:デフォルトの名無しさん mailto:sage [2005/11/29(火) 23:57:56 ]
>>338
そうか。Perlスクリプトを公開すれば解答も公開すること
になるから仕方ないかもしれんな。しかし、大体の想像はつく。
>>334 に書いてあるものを100問分作って、
>>335 に書いてあるものを0〜200の範囲で作るんだね。
拝見できないのは残念だが、まあ、がんばってタイプしてくれ。




340 名前:デフォルトの名無しさん [2005/11/30(水) 00:31:36 ]
>>339
本当にありがとう。いい人いるんだね。ありがとう。
点数配分を配列ではなく、原始的な構造でチマチマ入力してやっていきます。
3000行以上のCGIになります(笑)

341 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 07:26:07 ]
微笑ましいですね^^

342 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 11:25:43 ]
^^;

343 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 19:04:43 ]

性別

回答者合計者○($SEXSUM)名中

男○($SEXMALE)名
女○($SEXFEMALE)名




というのをHTMLで出力したいんだけど、ディレクトリに SEX.txtというのを置いて
そのtxtファイルの中に「 0,0 」
というふうに男女の初期値の人数をいれておいて。

毎回フォームから'GENDER'の値が0(男性).もしくは1(女性)で送ってきた時のみ。
SEX.txtを読み込んで、1足して表示→そして読み込んだSEX.txtの人数の一人プラスという
ようなPERLスクリプト分かる人いますか?


344 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 19:11:07 ]
pc8.2ch.net/test/read.cgi/tech/1131286411/641

マルチ放置推奨

345 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 13:49:45 ]
西暦の "2005"という部分だけ、取得したいんだけど

$TIME= (ここはどうすればいいですか?)

346 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 13:56:41 ]
>>345
この辺読んで基礎からじっくり勉強したらいいんじゃない?
pc8.2ch.net/test/read.cgi/tech/1131286411/2
www.hyuki.com/writing/techask.html

347 名前:デフォルトの名無しさん [2005/12/01(木) 14:02:29 ]
my($sec, $min, $hour, $day, $mon, $TIME, $wday) = localtime(time);

# 取得した値を調整(リファレンス参照)
$TIME+= 1900;

348 名前:デフォルトの名無しさん [2005/12/01(木) 14:03:51 ]
>>347
とんくす

349 名前:デフォルトの名無しさん [2005/12/01(木) 14:27:50 ]
$TIME=`perl -MPOSIX=strftime -le 'print strftime("%Y", localtime())'`




350 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 14:29:20 ]
>>347
長い

$TIME = 1900 + (localtime(time()))[5];

351 名前:デフォルトの名無しさん [2005/12/01(木) 16:01:06 ]
>>350
長いというならlocaltimeの引数のtime()も省略可能だよ。


352 名前:デフォルトの名無しさん [2005/12/01(木) 16:11:56 ]
>>351
ナイスつっこみ!
お前みたいなのを待っていた

353 名前:350 mailto:sage [2005/12/01(木) 16:15:15 ]
知ってるよ
どんなunixtimeを渡すのか分からんから一例を書いたまでだ

354 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 16:42:12 ]
そういうのを負け惜しみって言うんだぜ

355 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 17:56:57 ]
>>345
$TIME = 1900 + (localtime)[5];


356 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:00:06 ]
個人的には strftime の方が好みだな。

357 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:04:14 ]
>>343
Yahooにまで…。
messages.yahoo.co.jp/bbs?.mm=CP&action=m&board=1835099&tid=a1zperla1ya5qa1bca5ka1z&sid=1835099&mid=368
しかも誰か答えちゃってるし。

358 名前:350 mailto:sage [2005/12/01(木) 18:08:14 ]
なんで煽られてるのかが分からんのだが・・中学生か?

359 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:24:26 ]
>>343の答えは
pc8.2ch.net/test/read.cgi/php/1102980903/965-967
でもう出てる



360 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:28:38 ]
>>358
変な奴はほっとけ

361 名前:デフォルトの名無しさん mailto:sage [2005/12/01(木) 18:38:49 ]
VIPが出来てから馬鹿が流入してきた

362 名前:デフォルトの名無しさん mailto:sage [2005/12/03(土) 23:36:45 ]
馬鹿というかガキなんだよな。煽り方も知らないような。

363 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 21:25:33 ]
ネットショップで○○時から○台限定で販売、とかいうのを買おうとすると
真っ先にスクリプターに買い占められちゃうんだけど
そういうのに対抗できる自動購入スクリプトってPerlで組めませんか?

364 名前:デフォルトの名無しさん mailto:sage [2005/12/06(火) 23:39:56 ]
組めたとしてもここで公開されれば対策される。
対策されなくても公開されている以上大勢が使う。
意味がない。

365 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 00:01:35 ]
>>363
組めます

366 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 04:17:29 ]
。゚(゚∩д∩゚)゚。
確かに仰るとおりですね・・・

367 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 08:47:31 ]
楽天のなら作った事ある

368 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 09:24:49 ]
ビックカメラのは組めませんか?

369 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 09:30:28 ]
楽天のは空売りですよ



370 名前:367 mailto:sage [2005/12/07(水) 09:41:05 ]
いや、俺は楽天で1円で1GBのmp3プレーヤゲットしたんだがw

サンプルページはないのか
ビックカメラの
仕様が分からんとどうにもならんだろ

371 名前:デフォルトの名無しさん mailto:sage [2005/12/07(水) 10:57:09 ]
ビックカメラの場合
こういう場合のと
www.biccamera.com/bicbic/jsp/w/catalog/detail.jsp?PRODUCT_ID=0010097057
こういう場合のがあるんだけどなんか違うの?
www.biccamera.com/bicbic/app/w?ActionType=bw011100_01&PRODUCT_ID=0010007029

372 名前:デフォルトの名無しさん [2005/12/10(土) 15:47:01 ]
age保守

373 名前:PAJA [2005/12/10(土) 16:52:51 ]
はじめまして、PAJA といいます。
# Vine Linux 3.1 の Perl v5.8.2 です。

./trial.pl の中で、

`vi ./hoge.txt`

と記述したところ、下記のようなメッセージがでてしまいました。

" Vim: 警告: 端末への出力ではありません"

やりたいことは、./trial.pl を実行すると "./hoge.txt を vi で開く"
ようにすることです。

どうすれば、できるようになるでしょうか。

よろしく、お願いします。


374 名前:デフォルトの名無しさん mailto:sage [2005/12/10(土) 17:23:42 ]
system "vi hoge.txt";


375 名前:PAJA [2005/12/10(土) 19:41:10 ]

>> 374

ちゃんと開くことが出来るようになりました。
ありがとうございました。

376 名前:デフォルトの名無しさん mailto:sage [2005/12/11(日) 05:44:49 ]
>>373
実行したものからの出力を受け取らないならバッククォートは使わない

と覚えておくといいよ。

377 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 15:28:53 ]
すいません。教えてください。
$_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";
であるとき

$s1が"AI今日U<KAKIKU>SASISU%sNANI"、
$s2が"明日"、
$s3が"明日TU"、
$s4が"TATITU"
となるようにするプログラムを教えてください。
どうかよろしくお願いします。

378 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 15:53:09 ]
>>377
$s1 = "AI今日U<KAKIKU>SASISU%sNANI";
$s2 = "明日";
$s3 = "明日TU";
$s4 = "TATITU";

それだけしか条件がないとこれでもいいわけだが(笑)

どういう規則でそうなるのか例だけじゃわかんね。



379 名前:377 mailto:sage [2005/12/14(水) 16:18:46 ]
>378
すいません。 $_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";が条件です。
自分では以下のようにしてやってみていたのですが、うまくいきません。
@list = split (/,/, $_);

if ($list[2] =~ /<[A-Z]+\*[A-Z]+>/) {
($s1 = $list[2]) =~ s/[^A-Z][^<]*<[A-Z]+\*[A-Z]+>/%s/g;

@s2 = $list[2] =~ /([^A-Z][^<]*)<[A-Z]+\*[A-Z]+>/o;
$s2 = $s2[0].$s2[1];

@s3 = $list[2] =~ /([^A-Z][^<]*)<[A-Z]+\*([A-Z]+)>/o;
$s3 = $s2[0].$s2[1];

@s3 = $list[2] =~ /<([A-Z]+)\*{1}([A-Z]+)>/g;
$s3 = $s3[0].$s3[1];
}



380 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 16:30:10 ]
だめだ。問題を説明する能力のない人らしいので
エスパーさん出番です。


381 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2005/12/14(水) 16:48:42 ]
こうかな。

$_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";

(my $s1 = $_) =~ s/([^A-Z<]+)<([A-Z]+)\*([A-Z>]+)>/\%s/;
my $s2 = $1;
my $s3 = $1 . $3;
my $s4 = $2 . $3;

use Data::Dumper;
print Data::Dumper->Dump([$s1, $s2, $s3, $s4], [map { 's'.$_ } (1 .. 4)]);

>>377
誰にでも理解できるように仕様を説明するように。
具体的に言うと、小学生にも分かるように。

382 名前:377 mailto:sage [2005/12/14(水) 17:07:42 ]
というか、解決?かどうかまだ不明ですが一応出来ました。
379は貼り間違いました。↓は解決?したものです。
$_ = "AI今日U<KAKIKU>SASISU明日<TATI*TU>NANI";
($s1 = $_) =~ s/[^A-Z][^w]{1,3}<[A-Z]+\*[A-Z]+>/%s/g;
print "$s1\n";

@s2 = $_ =~ /([^A-Z][^w]{1,3})<[A-Z]+\*{1}[A-Z]+>/o;
print "@s2\n";

@s3 = $_ =~ /([^A-Z][^w]{1,3})<[A-Z]+\*{1}([A-Z]+)>/o;
print "@s3\n";

@s4 = $_ =~ /<([A-Z]+)\*{1}([A-Z]+)>/g;
print "@s4\n";
これで一応目的の動作をするのですが、
2行目が特によくわかりません。
[^A-Z][^w]{1,3}は何でしょうか?
[^w]って何?ワード文字?ワード文字は\wですよね?
[^w]を普通に読むとwという文字以外すべてだと思うのですが。

383 名前:377 mailto:sage [2005/12/14(水) 17:14:38 ]
>381
わかりにくくてすいません。
目的は文字列中の<*を含む英大文字>の部分とその直前の漢字の展開です。

384 名前:デフォルトの名無しさん [2005/12/23(金) 19:01:41 ]
メートル単位の長さを与えて、それをヤードに変換して表示するプログラムを教えてください。

1メートルは1.1ヤードとしてください。

385 名前:デフォルトの名無しさん [2005/12/23(金) 19:03:08 ]
インボカントって何か教えてください

386 名前:384 [2005/12/23(金) 19:11:02 ]
追記します。

メートル単位の長さをヤードに変換したり、ヤード単位の長さをメートルに変換するプログラムを教えてください。

>>384でかいたような一方通行のプログラムでしたら分かります。
上のような場合、どうやって分岐(?)させればよいのでしょうか?

387 名前:384 [2005/12/23(金) 19:17:39 ]
>>384について考えたプログラムを載せておきます。
どなたか、>>386のように改変してください。。。

use strict;
my ($meter, $yard);
print "長さをメートルで入力してください";
$meter = <STDIN>;
chomp ($meter);
$yard = $meter * 1.1;
print "$meterメートルは$yardです。\n";

388 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 20:02:18 ]
>>387
入力値がメートルとした場合のヤードの値
入力値がヤードとした場合のメートルの値
を計算して結果を2行書けばいいんじゃね?

389 名前:デフォルトの名無しさん [2005/12/23(金) 22:21:41 ]
>>388
なるほど。
入力時の数字が、10だったら

10メートルは***ヤードです。
10ヤードは***メートルです。

とすれば良いのですね。
逆転の発想ですね!ありがとうございます。



390 名前:デフォルトの名無しさん mailto:sage [2005/12/24(土) 00:19:30 ]
それなんて宿題

391 名前:デフォルトの名無しさん [2005/12/24(土) 17:51:13 ]
age
宿題でもどーんとこいや

392 名前:デフォルトの名無しさん mailto:sage [2005/12/25(日) 18:26:07 ]
perl -MO=Xref,-r hoge.pl の結果から以下のような結果を整形してみたいです。出してください。
■結果
hoge.pl 250<0>main()
hoge.pl 160├<1>get_home_directory()
hoge.pl 135│└<2>usage()
hoge.pl 190├<1>read_configration()
hoge.pl 220│└<2>get_string()
       <<略>>

393 名前:ヽ(´ー`)ノ ◆.ogCuANUcE mailto:sage [2005/12/25(日) 19:31:09 ]
>>392
-r 付けなきゃそれっぽくならんかね。

394 名前:デフォルトの名無しさん mailto:sage [2005/12/26(月) 00:01:42 ]
あれだと、エディタのタグジャンプ使えないし、みづらいので。
cの関数コールグラフ書くフリーウェアのfunctreeみたいな使い勝手
のものが欲しいです。

395 名前:デフォルトの名無しさん mailto:sage [2005/12/26(月) 11:49:52 ]
>>386
引数で数値の後に m が付いていたらメートル、yが付いていたら
ヤード、ということにするならこんな感じか。

#!/usr/bin/perl -w
use strict;
for(@ARGV) {
if(/^(\d+(\.\d+)?)(m|y)$/) {
if ($3 eq 'm') {
print "$1 メートル = " . ($1 * 1.1) . " ヤード\n";
} else {
print "$1 ヤード = " . ($1 / 1.1) . " メートル\n";
}
} else {
print STDERR "$_: 解釈できません。\n";
}
}


396 名前:デフォルトの名無しさん [2006/01/13(金) 16:15:09 ]
1
INDATEというファイルの中身を読み込んで処理するものであること。(INDATEも提出すること)
2
少なくとも一個のif文をつかっている。

3
for.while.foreachなどの繰り返しを少なくとも一個は使っている。
4
少なくとも一個の配列を使っている。
5
少なくとも一個の引数を使っている。
6
以下の様に実行することでOUTDATEに結果が出力される。
%KADAI3<INDATE>OUTDATE
注:3は引数である。

という課題です。頼みます。

397 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 16:17:49 ]
>>396
教科書に答えが。

398 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 16:18:35 ]
>>397
う・・・

399 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 16:40:59 ]
なんだその意味不明な課題
俺が馬鹿なだけかもしれんが、何をしたいのか訳わからん



400 名前:デフォルトの名無しさん [2006/01/13(金) 16:44:17 ]
>>399
1〜6を満たす自由な機能のプログラムを作るって課題なんですが…

401 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 16:47:08 ]
ああそういう意味か
%KADAI3<INDATE>OUTDATE
まだこれの意味が分からんが

402 名前:デフォルトの名無しさん [2006/01/13(金) 16:56:45 ]
>>401
Terminalで入力したらってことだからあまり関係ないです。ごめんなさい。

403 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 17:28:01 ]
それDATEじゃなくてDATAだろ

404 名前:デフォルトの名無しさん [2006/01/13(金) 17:37:44 ]
>>403
そうです。ほんとごめんなさい。

405 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 21:34:26 ]
結局>>397でFAだな


406 名前:デフォルトの名無しさん [2006/01/14(土) 07:43:38 ]
そんなぁ・・・

407 名前:デフォルトの名無しさん mailto:sage [2006/01/14(土) 09:42:00 ]
#!/usr/bin/perl
use LWP::Simple;
$url = 'girls.twistys.net/preview/';
for ($i=1; $i<=500; $i++) {
$num = sprintf("%03d", $i);
$_ = get($url.$num."/");
s/\w*\d{1,2}\.jpg/push @jpgs, $&/eg;
foreach $jpg (@jpgs) {
getstore($url.$num."/".$jpg, $num.$jpg);
}
}

408 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 08:50:23 ]
仲間分けについてのプログラムについて教えてください
1番と3番
1番と5番
1番と7番
2番と6番
2番と8番
3番と5番
3番と11番
が仲間です
配列には上から
1\t3
1\t5 ……のように入っています

この時1,3,5,7,11 と 2,6,8 のように仲間に分けるプログラムを作ってください

409 名前:ゆみ [2006/01/16(月) 11:24:17 ]
Perl初心者です。教えてください。

日付,メールアドレス
日付,メールアドレス
日付,メールアドレス



と数万行も続くデータから、重複メールアドレスが存在したときは
その行を取り除くということは出来るのでしょうか。
困っています(;;)教えてください。






410 名前:デフォルトの名無しさん [2006/01/16(月) 11:39:46 ]
できるよ

411 名前:ゆみ [2006/01/16(月) 11:44:33 ]
どうやればいいのでしょうか?
是非教えてください。。。

412 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 11:44:49 ]
>>409
perl -ne "/,(.+)/ && !$dup{$1}++ && print" in.csv > out.csv

413 名前:ゆみ [2006/01/16(月) 11:51:59 ]
>>412

ありがとうございます(*^^*)
これはコマンドプロンプト(PC)上で行う処理方法でしょうか?
サーバー上のCGIファイルの中で処理する場合の書き方はありますか?

またin.csvというのが元のデータファイルで、out.csvというのが
出力された新しいファイルですよね?

414 名前:ゆみ [2006/01/16(月) 12:02:04 ]
perl -ne "/,(.+)/ && !$dup{$1}++ && print" in.csv > out.csv

これも試してみましたがうまくいきません。
1万行以上あるのに新しく作られたファイルは60行足らず。

もしかすると私の説明不足なのかもしれません。
重複したメールアドレスの存在しない日付,メールアドレス
のリストを作りたいのですが。。。

意味わかりますでしょうか(**)ごめんなさい。。。

415 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 13:54:12 ]
>414
m月d日に誰からメールが来てるかのリストを作るのか?

だったらDBに読み込んでクエリ書いた方が手っ取り早いと思われ。
SELECT dateval, addr FROM infile GROUP BY dateval, addr;


416 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 15:43:02 ]
>>414
てことはまず日で分けて、その中に同じアドレスがあっても1つで出すということだな。
じゃあこれを参考に作れ。

my %data;

while (<>) {
 chomp;
 if (/^([^,]+),(.+)$/) {
  $data{$1}{$2} = 1;
 }
}

for my $day (sort keys %data) {
 for my $addr (sort keys %{$data{$day}}) {
  print "$day,$addr\n";
 }
}


417 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 15:45:47 ]
>>408
何がどう仲間なのか全然分からん。
もっと詳しく説明するように。


418 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 19:15:13 ]
>>408
こんなのか?データは標準入力から。

my @ary=();
my @index=();
sub pushme($$)
{
my ($ary,$val)=@_;
my $i;
for($i=$val;!UNIVERSAL::isa($ary->[$i],'ARRAY');$i=$ary->[$i]){}
push(@{$ary->[$i]},$val);
}
while($_=<STDIN>){
/^(\d+)\t(\d+)$/;
if(defined($ary[$1])){
$ary[$2]=$1;
pushme(\@ary,$2);
}elsif(defined($ary[$2])){
$ary[$1]=$2;
pushme(\@ary,$1);
}else{
my @newary=($1,$2);
$ary[$1]=\@newary;
$ary[$2]=$1;
}
foreach(@ary){
if(ref($_) && ref($_) eq 'ARRAY'){
print join(",",@$_)."\n";
}
}

419 名前:418 mailto:sage [2006/01/16(月) 19:18:56 ]
本当は sub pushme に \@ary 渡すのは蛇足。
渡さなくともここでは @ary は有効なスコープ。



420 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 20:08:55 ]
>>408
@list = ( "1\t3", "1\t5", "1\t7", "2\t6", "2\t8", "3\t5", "3\t11" );
$tmpstr .= join ':', map "\t$_", @list;

1 while $tmpstr =~ s/(\t\d+)((?:\t\d+)*):((?:[^:]*:)*)((?:\t\d+)*)\1((?:\t\d+)*)(?::|$)/$1$2$4$5:$3/;
1 while $tmpstr =~ s/(\t\d+)((?:\t\d+)*)\1(?=\t|:)/$1$2/;

@grouping = map [/(\d+)/g], split ':', $tmpstr;
$" = ",";
print "@{$grouping[0]}と@{$grouping[1]}\n";

421 名前:408 [2006/01/16(月) 21:04:13 ]
配列に@nakamaに上から
$nakama[0]="1\t3";
$nakama[1]="1\t5";
……

という風に入っていて、それぞれ1と3は仲間、1と5は仲間という意味になっています。
1と3が仲間で、3と11が仲間であれば1と11も仲間とします。

これで>>408を 1,3,5,7,11と 2,6,8に分けたいのです。


422 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 21:06:04 ]
>>420
おお、更新していなくて分かりませんでした。
それでうまく出来ました。ありがとうございます!

423 名前:ゆみ [2006/01/16(月) 23:00:24 ]
409です。>>416さん有難う御座います。。。
私はホントに初心者で・・・説明べたで申し訳御座いません。
416さんのは同じ日付内で同じメアドがあった場合、排除するという
内容でしょうか?

たとえば
1月1日,aaa@aaa.aa.aa
1月1日,bbb@bbb.bb.bb
1月1日,ccc@ccc.cc.cc
1月2日,aaa@aaa.aa.aa
1月2日,bbb@bbb.bb.bb
1月3日,bbb@bbb.bb.bb
1月3日,aaa@aaa.aa.aa
1月4日,ccc@ccc.cc.cc
とあった場合、

↓↓↓変換後↓↓↓↓

1月3日,bbb@bbb.bb.bb
1月3日,aaa@aaa.aa.aa
1月4日,ccc@ccc.cc.cc

というように同じメアドが重複しないように更に日付は最新(最下段)
の日付を付けてリスト化したいのです。。。
日付は最上段のものでも構いませんが。。。

出来れば。。。できれば。。。データファイルの読み込み部分から
解説して頂けないでしょうか。。。DBではなく、テキストファイルなんです。。。
本当にすみません(><)(;;)




424 名前:デフォルトの名無しさん [2006/01/16(月) 23:19:38 ]
ファイル読み込みくらいなら、perl入門のサイトや本で調べられるだろ

425 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 23:25:50 ]
>>423
初心者初心者連呼するならエクセルのフィルタ使うとかにしたほうがいいんでない?

426 名前:ゆみ [2006/01/16(月) 23:33:08 ]
>>424厳しいお言葉・・・有難う御座います。
ではファイルの読み込み部分は結構です。。。
>>425それでは意味がないのです。。。

お願いします!!!(;;)

427 名前:デフォルトの名無しさん mailto:sage [2006/01/16(月) 23:39:52 ]
こんな擦れ合ったのか〜

次の答えを教えてください。

以下のタグを結合したい。

(1)<M>hogeM</M><X>hogeX</X> →  <X>hogeMhogeX</X>
(2)<X>hogeX</X><M>hogeM</M> →  <X>hogeXhogeM</X>
(3)<M>hogeM</M><X>hogeX</X><M>hogeM</M>   → <X>hogeMhogeXhogeM</X>
※<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeX</X> は結合しない。

<例>
※以下は一行で、\ は連結の意味です。

......hoge.......<M>hogeM</M><X>hogeX</X>.....\
........hoge......<X>hogeX</X><M>hogeM</M>.....\
.....hoge.........<M>hogeM</M><X>hogeX</X><M>hogeM</M>...\
.........<X>hogeX</X>................<M>hogeM</M>..\
..<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>

......hoge.......<X>hogeMhogeX</X>.......\
......hoge......<X>hogeXhogeM</X>..........hoge....\
.....<X>hogeMhogeXhogeM</X>............<X>hogeX</X>...\
.............<M>hogeM</M>...\
.<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>

正規表現でも、何でもOKなのでお願いします。

428 名前:デフォルトの名無しさん [2006/01/16(月) 23:52:53 ]
難しかったかな?

429 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 00:12:25 ]
>>427
ヒント: 解く奴も人間




430 名前:デフォルトの名無しさん [2006/01/17(火) 00:36:53 ]
>>427
無理

431 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 01:53:26 ]
>>426
意味がないってどういうこと?
csvをエクセルに読み込んで重複を消すだけじゃないの?
知識らしい知識もいらんし煽りじゃなくあなたのような人向けだと思うが。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<217KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef