トップページ⇒php
1001コメント371KB

Perlコーディング初心者質問スレ Part 43

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2005/08/12(金) 01:26:47ID:mHnZWvqz
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0842nobodyさん2005/10/11(火) 10:40:14ID:???
>>839
httpヘッダ出してないからだろ。
加えて一行目のperlパスが違うってのもあるかもしれないが。
08438422005/10/11(火) 10:45:14ID:???
あ、違うわ。そもそもおまい代入の方向間違ってるよ。
「=」の左辺に右辺の結果が代入されるんだぞ。
ちょっと勉強しなおして来い。一発で見抜けなかった俺も修行してくるから。
0844nobodyさん2005/10/11(火) 10:49:14ID:4r4FVZwb
ぉ、よ〜く考えてみればそうだ・・・
じぇんじぇん頭が回ってなかったなw
よ〜し、では修正に逝ってきますw
0845nobodyさん2005/10/11(火) 10:53:23ID:4r4FVZwb
#!/usr/bin/perl
$kexp= 200;
$pexp= 676;
$bexp= 267;
$a= $kexp;
$b= $pexp;
$c= $bexp;
$d= $a + $b + $c;
print $d;

んで、一応上記のとおりに直しました。
その後はどうすればいいんですかね??
まじ、初歩的ですまんorz
0846nobodyさん2005/10/11(火) 11:03:44ID:iD4ymnU6
Server: Apache/1.3.33 (Unix) mod_perl/1.29
Image::Magickで画像の出力を試しているのですが、
Firefoxで以下のエラーメッセージが表示され上手くできません。
"画像ファイル "http://test.notw.biz/sample.cgi" は壊れいているため、表示できませんでした。"

シェルから実行したところ上手く画像は出来ているのですが、
ブラウザから動かすとうまく行きません。
http://www.gac.jp/article/index.php?stats=question&category=12&id=15812&command=msg
も参考にしましたが駄目でした。

use Image::Magick;

my $img_bg = new Image::Magick;
$img_bg->Set(size=>"90x9");
$img_bg->ReadImage("xc:pink");

print ("Content-type: image/png \n\n");
binmode STDOUT;
$img_bg->Write("png:-");
print "\n";

解決方法は何かないでしょうか?
>> $img_bg->Write("png:-");
を強制的にフラッシュ出来れば何とかなりそうな気はするのですが。。。
0847nobodyさん2005/10/11(火) 11:24:44ID:???
ハゲワラwww
0848nobodyさん2005/10/11(火) 11:26:44ID:???
>>818
>原因が分からないのですが何かの切っ掛けでこの部分がたまにエラーを吐いてきます。
>
>129 : foreach(keys %an){
>130 :  $data = sprintf("%08d\t$_",$an{$_});
>131 :  push(@count,$data);
>132 : }

"%08d\t$_"は、$_の内容に応じて、展開結果が変わる。
展開結果の中に書式指定文字列としてタブーなものが混じることもあるから、
「たまにエラーを吐く」ということになるのだろう。
$data = sprintf("%08d\t%s", $an{$_}, $_);
のようにすると解決すると思われ。
0849nobodyさん2005/10/11(火) 11:59:20ID:???
たぶん printf "%n"; みたいなことになったんじゃ?
0850nobodyさん2005/10/11(火) 12:14:19ID:???
>>845
どうすればいいって、直した結果どうなったのよ?
相変わらず500エラーなん? >>842とか確認したん?
0851nobodyさん2005/10/11(火) 12:26:14ID:4r4FVZwb
相変わらず500です。
ヘッダーの足し方がいまいち不明で、
どこら辺に足せばいいのかがわからなくて、
ただいま格闘しておりました・・・。

ですが、ヘッダーがどんな物かはわかるんだけど、
やはり場所が不明で500になってしまいます。
0852nobodyさん2005/10/11(火) 12:30:16ID:8zYGlOye
すいません
質問があります。
foreach(sort @data){
としたいのですが@dataの中身はカンマ区切りで2番目と3番目のキー
でソートしたいのですが方法はありますでしょうか?
0853nobodyさん2005/10/11(火) 12:30:33ID:???
>>846
最後の print"\n"; が要らないんじゃないかなぁ。
Firefox以外のブラウザだとどうなのさ?
0854nobodyさん2005/10/11(火) 12:34:55ID:???
>>851
わかってないことをわかったように言うな。
#!/usr/bin/perl
print "content-type:text/plain\n\n";
$kexp= 200;
$pexp= 676;
$bexp= 267;
$a= $kexp;
$b= $pexp;
$c= $bexp;
$d= $a + $b + $c;
print $d;

これで動かなきゃあとは一行目だ。
0855nobodyさん2005/10/11(火) 13:18:47ID:???
「今度はダウンロードになってしまいます」、とか言ってきそうだ。
0856nobodyさん2005/10/11(火) 13:28:06ID:???
こういう輩に限って動き始めると事後報告そっちのけになるからな
08578462005/10/11(火) 15:16:03ID:???
>>853
print を抜いても
IE、Operaで試してみても駄目でした。

色々調べているのですが
どうにも手に負えそうにないので別な方法を考えようと思います。

ありがとうございました。
0858nobodyさん2005/10/11(火) 15:39:12ID:???
>>852
sort について調べなされ。
自分で条件を書けるから。
0859nobodyさん2005/10/11(火) 15:40:53ID:XkXcz5GJ
perlは、
$1と書かなければならないところで\1と書くとうまく動作しませんが、
\1をすべて$1と書きかえて問題が生じることはありますか?
0860nobodyさん2005/10/11(火) 15:45:22ID:???
>>859
あります。
08617962005/10/11(火) 19:28:50ID:???
皆様、遅ればせながらご返答有難うございました。

私のやりたかったことは、
if($form{read/([0-9a-zA-Z]+)/]}){ print $1; }
このような判定がかけられればと質問させていただいた次第です。
説明不足ですみませんでした。

順次試させていただきます。
有難うございました。
0862nobodyさん2005/10/11(火) 21:15:56ID:???
>>859
とりあえず簡単な例は "\\1" だな。
0863nobodyさん2005/10/11(火) 21:18:28ID:???
>>796
お前がそう書いたらどういう風に動くことを期待しているのか
説明してくれないと結局何がなんだかわからないわけだが。
08648202005/10/11(火) 21:49:41ID:???
みなさんご指導ありがとうございました。おかげさまで宿題無事にSubmitでけそうです・・・
一応できたの載せときます。
#!/perl
#ex2.plx
use warnings;
use strict;
print "Hexadecimal and Octal number converter\n\n Please enter the Hexadecimal number:";
my $hex = <STDIN>;
chomp($hex);
print hex $hex,;
print "\n Please enter the Octal number:";
my $oct = <STDIN>;
print oct $oct,;

一番まいったのが$と#の違いに気づくのに1時間近くかかったことでしょうか・・・
いや〜Perlって奥が深い
0865nobodyさん2005/10/11(火) 21:54:48ID:???
>>864
とりあえず、動きましたねw
おめでとう!
08668202005/10/11(火) 21:55:29ID:m+2zbTP9
質問です・・・・
Decimalを256以下の数字で聞いてきて、それをBinaryにコンバートするプログラムをつくっれ
っていうものなんですが・・・ヒントがあって、(bitwise operator 8回使用)
っていう問題なんです。
これって、IF使わないとだめなんでしょうか?それともIF使わないでもできるっぽいです?
まだIF習ってないのでもしかしてこれは誤問題じゃないか!?
って疑惑があがって来てるんですけど。。
できるんですか?教えて神様
0867nobodyさん2005/10/11(火) 21:57:37ID:???
>>864 バグありますよ
08687962005/10/11(火) 21:58:13ID:???
>>863
すみません。

existsってありますよね。
これの正規表現版のようなことをしたかった次第でございます。
そして可能であれば存在するキーの一部を後方参照できれば、と
先ほどの書き込みをさせていただきました。
0869nobodyさん2005/10/11(火) 22:06:58ID:???
>>796
つまりあるハッシュが与えられた正規表現にマッチするキーを
もってるかどうか判定したいということだろうか。
0870nobodyさん2005/10/11(火) 22:15:43ID:???
つまりgrepで十分なので既に回答はでてると。
0871nobodyさん2005/10/11(火) 22:30:14ID:???
>>866
とりあえずIF文はいらんよ。
つかネット環境まであるなら宿題は自分で調べようや。
0872nobodyさん2005/10/11(火) 22:32:14ID:???
まず>>1をよく読む
08737962005/10/11(火) 22:41:01ID:???
>>869
おっしゃるとおりです。
可能であれば、+後方参照もということでした。

>>870
帰宅後やってみたいと思います。

色々とご返答有難うございました。
0874nobodyさん2005/10/11(火) 23:03:18ID:C7OEkxia
$hoge = "運転中";
$hoge2 = "運転";

if($hoge =~ /$hoge2/){
print "ok";
}

マッチしないんですけど、なぜでしょうか。。
0875nobodyさん2005/10/11(火) 23:03:56ID:???
>>851
えーとな、sort サブルーチン以外の場所で $a と $b を使うのはやめれ。
俺が混乱するから。
0876nobodyさん2005/10/11(火) 23:08:27ID:???
>848
激しくありがとう!
0877nobodyさん2005/10/11(火) 23:25:44ID:???
>>874
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#errors
の、「マッチするはずなのにマッチしない (1)」
0878nobodyさん2005/10/11(火) 23:28:54ID:???
>>874
quotemeta 使え
0879nobodyさん2005/10/11(火) 23:33:36ID:???
それよりもSJISやEUCの違いに触れてやった方が、
今後のためにもいいんじゃないのか
0880nobodyさん2005/10/11(火) 23:39:41ID:???
quotemetaが何をするかを調べれば自ずと分かるから、良い回答だと思うけど。。
今後は結局本人次第かと。
08818202005/10/12(水) 00:22:26ID:???
宿題は昔から自分でやれという決まりですよね。。。と、いうことで、一応できたので載せときます・・・念のため。。。
#!/perl
print "Please enther the decimal number which is between 0 and 255\n";
my $input = <STDIN>;
if ($input >= 127) {print "1";
$input = $input - 126;
}else{print"0";}
if ($input >=64){print"1";
$input = $input - 64;
}else{print"0"; }
if ($input >=32){print"1";
$input = $input -32;
}else{print"0"; }
if ($input >=16){print"1";
$input = $input -16;
}else{ print"0"; }
if ($input >=8){print"1";
$input =$input -8;
}else{print"0"; }
if ($input >=4){print"1";
$input = $input -4;
}else{print"0"; }
if ($input >=2){print"1";
$input =$input - 2;
}else{print"0"; }
if ($input >=1){print"1";
$input =$input -1;
}else{print"0"; }
IF使う方法しかどうしても解りませんでした・・・なにはともあれ御指導ありがとうござました。
0882nobodyさん2005/10/12(水) 00:23:12ID:???
久々に目がくらんだ
0883nobodyさん2005/10/12(水) 00:28:47ID:???
ビックリ!
0884nobodyさん2005/10/12(水) 00:38:54ID:???
>>881
俺が直してやるよ。
Please input a number between 0 and 255.
0885nobodyさん2005/10/12(水) 00:41:00ID:???
自分でやれってか友達いねーのかよと。
0886nobodyさん2005/10/12(水) 00:50:53ID:???
>>881
>>864のバグはわかったの?
0887nobodyさん2005/10/12(水) 00:52:30ID:???
>>886 優越感に浸りたいだけの馬鹿は嫌われるぞ。
08888862005/10/12(水) 00:55:45ID:???
>>887
(°Д°)ハァ?
バグがあるからあると指摘しているだけだけど…
優越感に浸りたいのはお前だろ!
0889nobodyさん2005/10/12(水) 01:11:03ID:???
>>888
わかったからその目がキモい顔文字を引っ込めてからまた来ような
0890nobodyさん2005/10/12(水) 02:02:11ID:???
>>881
ヒント:pack/unpackの"B"。
08918712005/10/12(水) 02:14:08ID:???
>>881
ちょwwwおまwwwwwビット演算子使えって言われてるのに
どうしてそういう答えになるんだよw ビットシフト使うんだよw
おまい授業ちゃんと聞いてないだろ。ちょと必死に基礎から勉強しなおせ
0892nobodyさん2005/10/12(水) 02:36:00ID:???
しかし if すら習ってないのに、あまり使わないビット演算なんか教えるんだ?
変わってる気がするのは俺だけか。
まあ hex や oct も習ってるしその延長かなあ。
perl なんだから、もっと目的があって作ってて楽しいことから教えればいいのに、って思っちゃう。
0893nobodyさん2005/10/12(水) 03:01:29ID:???
>>892
IFとかの基礎部分を習ったのに忘れてるだけだと思う
0894nobodyさん2005/10/12(水) 05:26:24ID:???
お手軽なperlを使ってbit処理の概念とかを学ばせようとしている希ガス
つかif文使うにしても>>881はあんまりだろw
0895nobodyさん2005/10/12(水) 11:38:44ID:???
確かに、ビット演算子を使わなくていいなら、これで決まりだよな。

my $input = <STDIN>;
printf ("\nbinary = %b", $input);
0896nobodyさん2005/10/12(水) 12:02:57ID:fQz+s6Mx
配列から特定の値をとりだすにはどうしたいいですか?

たとえば@dataの中にあいえおかきけこさしすせそ
が入ってるとします。「け」の文字だけ抜き出して$keにいれる
のはどうしたいいですか?順番が変わらないで$data[6]と添え字にすればいいかも
しれませんが、「け」の位置がいつもそことは決まってないんです。
先頭に来る場合もあれば、2番目にくる場合もあるんですね。

こういう場合、配列から取り出したい文字列を抜き出すのはどうやったら
いいのでしょうか?

ご教授お願いいたします。
0897nobodyさん2005/10/12(水) 13:00:06ID:???
>>896

@dataを使う必要はない。
$ke = 'け';
0898nobodyさん2005/10/12(水) 13:32:50ID:???
たしかに取り出したい文字列があらかじめわかっているなら
取り出す必要はないよなw
0899nobodyさん2005/10/12(水) 15:39:29ID:???
なななんだ!?>>896はつりだったのか!?
0900nobodyさん2005/10/12(水) 16:08:46ID:???
>>881
>宿題は昔から自分でやれという決まりですよね。。。

本来はそうなのだが、今回は特別だ。
教官が感激してくれるようなものを作ってやったぞ。

print "input number: ";
my $input = <STDIN>;
printf ("\n【照合用】 %08b", $input);

print "\nmybinary = ".binconv(0x80, $input);

sub binconv{
my ($binseed, $input) = @_;
return ($binseed ||"") && (($input & $binseed) && 1).binconv($binseed >> 1, $input);
}
0901nobodyさん2005/10/12(水) 16:19:17ID:???
>>900先生!
print "input number: ";
my $input = <STDIN>;
printf ("\n【照合用】 %08b", $input);
これだけでもいいかと思うんですが…
>>820の教官の問題にも問題があると思ってるのは漏れだけですか?
0902nobodyさん2005/10/12(水) 18:37:38ID:???
>>901

>>900 の回答は、>>866 の宿題に対するものだけど、
「ビット演算子を8回使う」という条件があるみたいだから、
printfの出力はあくまでも参考のみ。
09039012005/10/12(水) 18:55:56ID:???
>>902
>>900先生のコードはすばらしいと思うのですが…
なんでこんな問題を…と少し思ったしだいです。
>>820がどんな教科書で勉強してるのかも興味ありです。
0904nobodyさん2005/10/12(水) 19:14:52ID:???
ハッシュって値を格納した時点で箱の中のランダムの枠内に
入れられてしまうので、その後に入れた順番でソートをかける
ことは不可能という認識で間違いございませんでしょうか。
0905nobodyさん2005/10/12(水) 19:50:30ID:???
>>904
ハッシュを eash/keys/values/配列コンテキスト等で読み出した
際の順序は、人間にとっては一見ランダムだが、perl 自身に
とってはランダムではないし、何回呼んでも必ず同じ順序になる。

入れた順序に関係なく、目的の値を分かり易い名前で素早く取り
出せるように作られているのが今の perl の実装なので、入れた
順序が重要なら、それに適したデータ構造 -- 配列を利用するか、
Tie::IxHash のようなラッパーを使う。
09068202005/10/12(水) 22:09:26ID:???
>>900
すごいプログラムありがとうございます。
ですが宿題はすでに提出してしまいました。。
なので今後の参考にさせていただきます

>>903
使ってる教科書は学校でSubject毎に買わされる・・・なんていうんでしょう・・・。
70ページくらいのノートブック?っといったほうがいいかもしれません。

学校はオーストラリアのCollegeで日本で言う職業訓練校を低レベルにしたみたいなとこでしょうか・・・。
今回のSubjectの題名がNetwork Application Solution でこの教科書の2/3程がPerlについて、
残りがVBのDebuggingについてとか、あとはJAVAはなんだ、ActiveXはなんだProxyServerがどうとか
いう説明がちょちょってあるほんとにみすぼらしい構成になっております。
ちなみにこの教科書にはIFとかの説明は載ってません。
さらに今回のSubjectはALL Selfstudyなので先生はまったくと言ってイイほどなにも教えてくれません。
ここに書いた二つの問題はこのエセ教科書の”Acitivy"からの問題です。

以上の理由により、多少奇抜な内容になっています。>>903 さんが興味をもったのもうなずけます・・・。

なにはともあれPerlのセクションの宿題は今回ので無事全部終わりました。
レスくれた皆様ありがとです!
0907nobodyさん2005/10/12(水) 22:12:57ID:???
オーストラリアか。。
0908nobodyさん2005/10/12(水) 22:19:58ID:???
夜中の12時オーストラリアの地図を描く
0909nobodyさん2005/10/13(木) 00:17:06ID:???
NULL文字を正規表現で表すとどのようになるのでしょうか。

ご教示いただけますと幸いです。
09109032005/10/13(木) 00:29:57ID:???
>>906
なるほど。そうでしたか…何か妙な感じがしたんですよね。
お疲れ様でした&今後もがんばってください。
0911nobodyさん2005/10/13(木) 00:32:47ID:???
>>909
NULLという文字列?NULL定義された変数?
definedが知りたいのかな?
09129092005/10/13(木) 00:33:27ID:???
すみません。
やりたいことは、QUERY_STRINGの判定に
(\W|)c=3
このようなイメージの指定をしたいのですが、ようは英数字以外が
cの前にきた場合と「?c=3」と前に何もない場合を指定したいという
ことです。

説明下手ですみません。
0913nobodyさん2005/10/13(木) 00:34:52ID:???
>>911
Cの文字列のターミネータになるASCIIコード0のことじゃなかろか

ということで>>909
/\0/
0914nobodyさん2005/10/13(木) 00:37:18ID:???
>>912
ああ、失礼、それなら先読み否定アサーションを使うべし
(?<!\w)
0915nobodyさん2005/10/13(木) 00:40:44ID:???
>>820 のperlの勉強は終わったらしいが、まだ perl の p も始めてない気がするなあ。カワイソス。
0916nobodyさん2005/10/13(木) 00:42:22ID:???
CPU食わないで指定秒ストップさせることは出来ますか?
sleepだと5%ぐらい使ってしまってるみたいで・・・
09179142005/10/13(木) 00:43:52ID:???
後読み否定だったorzハズカシス
ついでだから>>912のようにやるならばという別解も書いとこう
(^|\W)
09189092005/10/13(木) 00:46:02ID:???
>>913-914
ご教示有難うございます。
ぐぐって調べてみましたが、どうやらこれは

(?<!...) ゼロ幅の否定後読み表明

みたいですね。
私には少し敷居が高そうなので、もう少し勉強してみます。
とにかく有難うございます。
09199092005/10/13(木) 00:52:49ID:???
>>917
すみません、行き違いになりました。
なるほど、と試してみましたが、なぜか引っかからなくなって
しまいました。

調べてみます。
09207662005/10/13(木) 00:53:02ID:???
>>777 766です。大変遅ればせながら
09219092005/10/13(木) 01:00:44ID:???
経過報告です。

× (^|\W)c=1
× (^)c=1
○ ^c=1

なんででしょうね。。
もう少し調べてみます。
09227662005/10/13(木) 01:07:08ID:???
↑Enterで書き込みになってた。。。スレ汚しすません

>>777
遅ればせながらレス有難うございます。
しかしながらいまだcsvへの書き込みが上手くいきません。。

やりたいのは、csv開いたときに

名前,Q1の回答,Q2の回答,Q3の回答。。。。
空欄,Q1の正解,Q2の正解,Q3の正解。。。。

と横並びにカンマ区切りで出したいのですがいろんなソースを入れてみても
上手くいきません。。泣
しかも名前を普通にFORM POSTからとりたいんだけど、どこにソース入れてもエラーになる。。

09237662005/10/13(木) 01:08:08ID:???
現在のソース要約はこんなのです。(.incのファイルはやめて普通にhtml→cgiにした。)

【question_1cgi】
# 質問の取得

&ReadParse;

if(open(IFILE,"question_1.tsv")) {
while(<IFILE>) {
chomp();
push(@question,$_);
}
close(IFILE);
}



09247662005/10/13(木) 01:09:22ID:???
# 回答の表示

my($qnum) = 0;
foreach (@question) {
($qval,$aval,@column) = split(/\t/);
next if($qval eq "");

$qnum++;
$key = "Q".$qnum;
$val = $in{$key};
if($val eq $aval) {
$check = "○";
} else {
$check = "×";
}

$anum = 0;
$answer[$anum] = " ";
foreach (@column) {
next if(!$_);
$anum++;
$answer[$anum] = $_;
}
09257662005/10/13(木) 01:09:56ID:???
# csv書き込み
open(WRITE_BBSDAT , ">> file.csv");
print WRITE_BBSDAT"ここがわかりません。。。";
print WRITE_BBSDAT"$val,$aval ←じゃ縦にならんじゃう。横にそれぞれ上下で表示したい。";
close(WRITE_BBSDAT);


どなたかお助けください。。お願い申し上げます。
0926nobodyさん2005/10/13(木) 01:12:17ID:???
何が × なんだ?

my $query = 'c=0&d=1';
とか
my $query = 'ac=1&c=0&dc=0';

c=0 だけにマッチさせたいんだよな?

if ($query =~ /(?:^|(?<=\W))c=0(?:(?=\W)|$)/) {
print 'ok?';
}
でない?
0927nobodyさん2005/10/13(木) 01:13:53ID:???
>>921
ありゃ、もしかしてPerlのバージョンが古いと動かなかったりするのかな
バージョンいくつか分かる?とりあえず5.6.1と5.8.7では動作したけど・・・
Perl4探してこよう・・・
09289262005/10/13(木) 01:14:07ID:???
>>921 ね
09299092005/10/13(木) 01:18:14ID:???
>>926
おっしゃるとおりの条件にマッチさせたいと思っております。
そしてご回答有難うございます。
ちょっと私にはもう少し理解する時間が必要になりそうですが、
一つ一つ勉強していきたいと思います。有難うございます。

>>927
v5.8.4ですので、バージョンは問題ないかと思います。
検証してみます。お手数おかけしましてすみません。
0930nobodyさん2005/10/13(木) 01:28:27ID:???
>>929
$query =~ /(?:^|(?<=\W))c=0(?:(?=\W)|$)/

分解すると

:^c=0 : $query の最初に c=0 があるとマッチ
(?<=\W)c=0 : c=0 の前に "[_0-9a-zA-Z] 以外" があったらマッチ
c=0(?=\W) : c=0 の後に "[_0-9a-zA-Z] 以外" があったらマッチ
c=0$ : $query の最後に c=0 があるとマッチ

(c=0(?=\W)) ってやらないで (c=0\W) ってやると、$1 に \W の文字が入ってしまうし、次のマッチの開始も \W の後の字からになってしまう。

つか正規表現スレにいくのはどうか。
0931nobodyさん2005/10/13(木) 01:37:50ID:???
>>766,920,922-925
相変わらず何やってるのかわからんw
もうちょっとソースの中に #コメント を入れてみたらどうか。
自分で見て何やってるか分かったとしても、他人はそうではないのだから。

csv なのに
split(/,/); じゃなくて split(/\t/); ってやってるのはいいんだっけ?

あと
> print WRITE_BBSDAT"$val,$aval ←じゃ縦にならんじゃう。横にそれぞれ上下で表示したい。";
わからん。
縦になったのなら 「それぞれ上下」 にはなったんではないのか。

$val,$aval
ってなりたいのか
$val
$aval
ってなりたいのか。

とりあえず入力されたデータに改行が入ってるままファイルに書き出したらアホなことになるから、
foreach my $k (keys %in) {
$in{$k} =~ s/\x0D?\x0A/<br>/g;
}
とか &ReadParse; の後にやってみたら?
0932nobodyさん2005/10/13(木) 01:47:35ID:???
>>922
ふう、やっとやりたいことがわかった
まず処理手順が問題。今の処理手順だと質問一つずるに対して出力処理をしようとしているけれど、
全ての質問を一つの行にまとめたいなら、保存しておいて後で出力しないと。

# 回答の表示
の頭で
my @vals = ();
my @avals = ();
の二変数を作ってforeachの最後で
push @vals, $val;
push @avals, $aval;
で、foreachを閉じてから、cvs出力で、
print WRITE_BBSDAT join(',', $in{name}, @vals);
print WRITE_BBSDAT join(',', '', @avals);
って感じ。
0933nobodyさん2005/10/13(木) 01:56:30ID:???
>>932 よくがんばったえらい
0934nobodyさん2005/10/13(木) 02:05:22ID:???
>>930
コレじゃダメなん?
(?:^|\W)c=0(?:\W|$)
09359092005/10/13(木) 03:20:42ID:???
>>930,934
すみません、色々と勉強してました。
試してみましたが、おかげさまでうまくいきました。

しかしながら私の知識がまだ追いついていないこともございますので、
これから精進していきたいと思います。

本当にご親切に有難うございました。
09367662005/10/13(木) 11:12:08ID:???


レス有難う御座います。勉強足らずで申し訳ないです。

教えていただいたとおりにやってみますた。
でもやっぱりcsvをexcelで開いた時に思う通りになつてなかた。。なんでだろう
もうわからん。。

最終的にはexcelで開いた時

$in{name} ←これはくり返さない。1回だけ表示(下のセルへ)
$val ←これはその問題数分だけ横にくり返し。excelの横セルはひとつずつ違うセルに。(下のセルへ)
$aval  ←同様。(下のセルへ)

次の人
$in{name}
$val 
$aval

てなっててほしいんです。
説明へたでごめんなさい。
09377662005/10/13(木) 11:16:18ID:???
現状ソース

# 回答の表示
my @vals = (1,2,3);
my @avals = (1,2,3);

my($qnum) = 0;
foreach (@question) {
($qval,$aval,@column) = split(/,/);
next if($qval eq "");

$qnum++;
$key = "Q".$qnum;
$val = $in{$key};
if($val eq $aval) {
$check = "○";
} else {
$check = "×";
}

$anum = 0;
$answer[$anum] = " ";
foreach (@column) {
next if(!$_);
$anum++;
$answer[$anum] = $_;

push (@vals, $val);
push (@avals, $aval);
}
09387662005/10/13(木) 11:17:24ID:???
# csvへ書き込み

open(WRITE_BBSDAT , ">> file.csv");
print WRITE_BBSDAT join(',', $in{name}, @vals);
print WRITE_BBSDAT join(',', '', @avals);
close(WRITE_BBSDAT);

すいません。。ここまで教えてもらったのに。。
0939nobodyさん2005/10/13(木) 17:05:23ID:tGcMLHwK
文字列の一部分を置き換える、という処理はどうすればいいでしょうか

入力されたデータによって、5文字目だったり12文字目の2文字分を
こちらで用意している(これも種類がいくつかある)2文字に置き換えたいんです

aaaaabbbbccddddeee → aaaaxxbbbccddddeee
aaabbbbcccdddddeef → aaabbbbcccddyydeef

一応
  ・置き換えたい位置を確認
  ・それより前をまず転記
  ・置き換え文字を転記
  ・置き換えたい位置よりあとを転記
という風にすれば可能だとは思うのですが、もう少しスマートな方法というのはあるのでしょうか?
0940ヽ(´ー`)ノ ◆.ogCuANUcE 2005/10/13(木) 17:12:57ID:???
>>939
substr() は?置換もできる。

my $str = 'foobarbaz';

substr($str, 1, 2) = 'OO';    # $str is 'fOObarbaz'
0941nobodyさん2005/10/13(木) 17:16:09ID:???
>>939
s/// か
substr() をあたりなされ。

aaaaabbbbccddddeee → aaaaxxbbbccddddeee
5文字目から2文字分を置換なら、

my $str = 'aaaaabbbbccddddeee';
substr($str, 4, 2) = 'xx';

お、先に書き込みが。
0942nobodyさん2005/10/13(木) 22:16:24ID:NiH4hrTC
ひさしぶりに掲示板を作ってます。
なんとか徹夜で終えて、明日の朝に間に合わせたいと思ってます。

思ったより疲れていて思い出せないのですが、
Text::CSV_XSの使い方何ですが、

「あいうえお
かきくえこ」

これってcombineを使えば改行をエスケープしてくれて、parseをしたときに自動で
元に戻してくれると思ってたのですが、勘違いですかね?
改行などその他すべての文字は必要に応じて自分でエスケープなどしないといけないのでしょうか?

でもそれだとこのモジュールの意味がないですよね・・・・;
CSVでのメタ文字?をエスケープしてくれた記憶があるのですが。。。。

どうぞよろしくお願いします。自分でも調べてみます。
レス数が900を超えています。1000を超えると表示できなくなるよ。