重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

指定したフォルダ内にあるcsvファイルのデータを
指定したhtmlファイルに出力するプログラムを書いているのですが、
下記のままだとcsvファイルにあるすべてのデータをとってきてしまいます。実現させたいことは「指定したフォルダ内にあるcsvファイル2行目のデータだけファイル出力する」というものです。
どなたかご協力お願いします。


#!/usr/bin/perl

#--------------------------------------------------------------#
# ディレクトリを開く
#--------------------------------------------------------------#
opendir(DIR,"test/");

#--------------------------------------------------------------#
# 出力ファイル名を指定
#--------------------------------------------------------------#
$dest = "test.html";
open (OUT, ">$dest") or die "$!";

#--------------------------------------------------------------#
# 出力ファイルにhtmlを出力
#--------------------------------------------------------------#
print OUT '<html>
<head>
<title>無題ドキュメント</title>
<style type="text/css">
<!--.style1 {color: #FFFFFF}-->
</style>
</head>
<body>
<table width="419" height="105" border="0" cellpadding="0" cellspacing="0">
<tr>
<th bgcolor="#000000"><span class="style1">名前</span></th>
<th bgcolor="#000000"><span class="style1">住所</span></th>
<th bgcolor="#000000"><span class="style1">性別</span></th>
</tr>';

#--------------------------------------------------------------#
# ディレクトリにあるファイル名を取得
#--------------------------------------------------------------#
while ($filename = readdir(DIR)) {

# ディレクトリにあるファイルパスを取得
$path = "test/$filename";
if(-f $path) {
# ファイルオープン
open (IN, $path) or die "$!";
while (<IN>) {
# カンマ区切りでデータを取得&改行削除
chomp(@data = split(/,/, $_));
print OUT "<tr>\n";
# 各行の3つのカンマ区切りデータを取得
print OUT "<th bgcolor=\"#666666\">",$data[0],"</th>\n<td>",$data[1],"</td>\n<td>",$data[2],"</td>\n";
print OUT "</tr>\n";
}
close(IN);
}
}
#--------------------------------------------------------------#
# ディレクトリを閉じる
#--------------------------------------------------------------#
closedir(DIR);
print OUT "</table>
</body>
</html>";
#--------------------------------------------------------------#
# ファイルを閉じる
#--------------------------------------------------------------#
close(OUT);

A 回答 (4件)

while (<IN>) {


↑ここを
<IN>;
<IN>;
として、close(IN) の前の } を削除してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やってみたんですあが、
どうもうまくいかないみたいです。
htmlは生成されますが、中身がカラのようです。

ちなみに<IN>;<IN>;というのはどういうことなのでしょうか。

お礼日時:2007/03/30 16:31

#2です。


どうやらchompの位置がわるいようでした。

# カンマ区切りでデータを取得&改行削除
chomp($line[1]);
@data = split(/,/, $line[1]);

としたら動きます。
    • good
    • 0

すみませんでした。


2つめの「<IN>;」を「$_ = <IN>;」に変えて下さい。
<IN>はINのファイルハンドルから1行読み込むということです。
1行目は無視して、2行目の処理をする、ということになります。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
ファイルハンドルのそもそもの意味を理解してませんでした。。
解決しました!!!

お礼日時:2007/03/30 18:08

open (IN, $path) or die "$!";


while (<IN>) {
# カンマ区切りでデータを取得&改行削除
chomp(@data = split(/,/, $_));
print OUT "<tr>\n";
# 各行の3つのカンマ区切りデータを取得
print OUT "<th bgcolor=\"#666666\">",$data[0],"</th>\n<td>",$data[1],"</td>\n<td>",$data[2],"</td>\n";
print OUT "</tr>\n";
}
close(IN);



open (IN, $path) or die "$!";
@line = <IN>;
close(IN);
# カンマ区切りでデータを取得&改行削除
chomp(@data = split(/,/, $line[1]));
print OUT "<tr>\n";
# 各行の3つのカンマ区切りデータを取得
print OUT "<th bgcolor=\"#666666\">",$data[0],"</th>\n<td>",$data[1],"</td>\n<td>",$data[2],"</td>\n";
print OUT "</tr>\n";
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
試してみたんですが、
chomp(@data = split(/,/, $line[1]));
の行でシンタックスエラーとなっていまいました。
なぜでしょう???

お礼日時:2007/03/30 18:16

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