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をエクセルに読み込んで重複を消すだけじゃないの? 知識らしい知識もいらんし煽りじゃなくあなたのような人向けだと思うが。