重要なお知らせ

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

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

あるディレクトリ内の全てのファイル名を取得し、
全てのファイルを開いてカンマ、ダブルクォーテーション付加の処理をし、
別ファイルへと出力する。と言ったものを以下のように作ったのですが、
入れ子のforeach{}内へ入って行きません、
foreachの入れ子は出来ないのでしょうか?
それともプログラムが間違っているのでしょうか?
どなたかご教授お願いいたします。

require "./jcode.pl"; # jcode.plの呼び出し
#ディレクトリ表示
opendir(DIR01,"./TestData") || die "can not open dir";
@FileName = readdir(DIR01);
closedir(DIR01) || die "can not close dir";
foreach $file (@FileName) {
if ($file eq '.') {next;}# '.'の時ループを抜ける
if ($file eq '..') {next;}# '..'の時ループを抜ける
$FName = "./TestData/$file";
# ファイルのオープン
open ( FILEHANDLE , "$FName") || die "ファイルを開けません :$!\n";
@line = <FILEIN>;
close (FILEIN);
foreach $line (@line){
#########################
print "TEST-->$line\n";
#########################
$line =~ s/ⅰ|ⅱ|ⅲ|ⅳ|ⅴ|ⅵ|ⅶ|ⅷ|ⅸ|ⅹ//g;
$line =~ s/\"/\"\"/g;
$line =~ s/\,\"\?/\"\,\"/g;
$line =~ s/\"\,\?/\"\,\"/g;
$line =~ s/\ |\ /\"\,\"/g;

&jcode::sjis2euc(\$line,"z"); # sjis --> euc コードへ変換
if (length $line != 1){
chop($line);
$cd_22 = chr(0x0022);
$line = "$cd_22$line$cd_22";
$line =~ s/([^\LF])$/$1\n/;
}
}
open (FILEOUT, ">./log/TEST.txt") or die; #上書き時
print FILEOUT @line;
close (FILEOUT);
}
}
exit;

A 回答 (2件)

ファイルのopenで指定しているファイルハンドル名と、以降のファイルハンドル名が違っていますが、これが問題ではないでしょうか?



No.1のalicia-yさんへの補足になりますが、foreach で指定した変数は各要素へのエイリアスになるので、変更は配列にも反映されますよ。
    • good
    • 0
この回答へのお礼

回答どうもありがとうございました。
 確かに言われてみれば単純なミスでしたが、言われてみて気が付きました。
どうもありがとうございました。

お礼日時:2002/10/21 13:35

$line の内容を変更しても @line の内容が変更されないので


処理されていない様に見えるのでしょう。
foreach を for($i = 0;$i <= $#line; $i++){
に変更して $line を $line[$i] に修正すれば
動くと思いますが。
    • good
    • 0

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