CDの保有枚数を教えてください

C言語は勉強しましたが、perlはまだまだ初心者の者です。
統計ソフトRの処理のためのスクリプトを書こうと思ってますが、うまくいかずに悩んでいます。
ファイルに以下の用に任意個の文字列が記述されています。ただし、ファイルの途中にはEND
が複数かかれており、END以降も文字列が続きます。

apple
best
china
dutch
END
apple
beer
END
child
death
zero

このファイルを受け取って、
c("apple","best,"chine","dutch"),c("apple","beer"),c("child","death", ,"zero")
のようにENDが出てくるまでc(" ",...)を繰り返しを出力するスクリプトを書こうと思っています。


open(IN, "datafile.txt");
@xx = <IN>;

print "c(";
foreach $yy (@xx) {
print "\"$yy\",";
}
print ")";
close(IN);

のように書くとこまではいけたのですが、この先が進めません。どなたかご教授ください。

A 回答 (4件)

> とそれぞれの()の最後の文字deuch beer zeroに,が残ってしまっています。

これを消すにはどうしたらいいでしょうか?
じゃあ、思いっきり手を抜くとこんな感じかな・・・。
open(IN, "datafile.txt");
@xx = <IN>;
close(IN);
my $yy = join("\",\"",@xx);
$yy =~ s/\r\n|\r|\n//g;
$yy =~ s/,\"END\",/),c(/g;
print "c(\"".$yy."\")";
exit;
でも本気でちゃんとプログラミングの処理として動作させたいなら自分がPCになったつもりで手順を考えたほうがためになると思う。

この回答への補足

質問が重複してしまったので改めて別のトピックとさせていただきます。回答ありがとうございました。

補足日時:2010/12/09 21:33
    • good
    • 0
この回答へのお礼

回答ありがとうございます。実際にスクリプトを試してみたのですが、


END
apple
beer
apple
END

のようにend間に同一の単語が出現しているとエラーが起きてしまいました。
回答のプログラムはちょっとスキルが自分には高すぎて修正ができません。
なんども、お手数をかけてしまい、大変心苦しくおもうのですが、
end間に同一の単語がでた場合取り除くコードを教えてもらえませんか?
なにとぞよろしくお願い申し上げます。

お礼日時:2010/12/09 20:17

「C を勉強した」というなら, 「C ではどう書くか」を考えてそれを perl に変換してもいいような気はするが, それはさておき.



そのプログラムがどのような動作をするのか, 説明できますか? そして, 何が足りないのか認識できていますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。プログラム自体は、見れば何をやっているかはわかりますが、自分で思いつくのは難しいです。上手な人のコードをたくさんみて参考にしたいです。

お礼日時:2010/12/09 20:07

たびたびすいません。


ヒントという質問だったのに全部書いて申し訳ありません。
先のリストには「END」が最終行にきた場合「...),c()」となってしまいますがそれでもいいのでしょうか?
それとも、こういうの「,c()」は無し?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。自分では思いつかなかったのでむしろ助かりました。
ENDが最後にくると、目視で削除します。
取り除けたらなおよいのですが。

お礼日時:2010/12/09 20:05

これでどうですか?



open(IN, "datafile.txt");
@xx = <IN>;
close(IN); ##ファイルを開いている時間はできるだけ短く

print "c(";
foreach $yy (@xx) {
$yy =~ s/\r\n|\r|\n//g;
if($yy ne "END"){
print "\"$yy\",";
}else{
print "),c(";
}
}
print ")";
    • good
    • 0
この回答へのお礼

早い回答本当にありがとうございます。とても助かりました。
ほとんど完璧に近いのですが、
c("apple","best,"chine","dutch",),c("apple","beer",),c("child","death" ,"zero",)

とそれぞれの()の最後の文字deuch beer zeroに,が残ってしまっています。これを消すにはどうしたらいいでしょうか?

お礼日時:2010/12/09 18:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!