質問: <$fh>) { chomp($buff); if ($buff =~ /,,/) { # 行内に「,,」があるか } elsif ($buff =~ /^,/) { # 先頭に「,」があるか } elsif ($buff =~ /,$/) { # 行末に「,」があるか } else { $syusei[$n]="$buff\n"; $n++ } } for($m=0;$m<$n;$m++){ for(my $i=0;$i","output.txt")or die("Error:$!"); for (my $h=0;$h<=$j;$h++){ print DATAFILE $syusei[$h]; } インプットファイル 11/22,service,1 ,base,1 11/22,pay,1 11/25,include,1 11/25,program, 11/27,drive,1 11/30,birthday,30 ,, .plのファイルをダブルクリックした際にインプットファイルを開いてアウトプットを.txt ファイルで出力するプログラムを作成していたのですが、 .plファイルとインプットファイルを一緒のフォルダの入れて作動するようにしたいのですが、うまくいかないのですがどうしたらよいのでしょうか? input.txtのカレントディレクトリがおかしいと言われたのですが、どう習得してインプットファイルを開いたらいいのかが分からないです・・・ やろうとしていること 1.テキストファイルの単語項目に該当する文字列の一文字ずらしができること 2.perlによって作成されたプログラムであること 3.アルファベット以外の文字は一文字ずらし対象外とする 4.日付、単語、数字の項目のいずれかが欠けている場合、その行は削除した状態で出力すること 5.用意されたテキストファイルはプログラム実行後も内容に変化があってはならない 6.作成した「.pl」拡張子ファイルからダブルクリックで実行できること 7.プログラム実行時に出力用のテキストファイルを作成すること 8.プログラム実行時に作成されるテキストファイル名は「output.txt」とする OS Windows
回答: plファイルをダブルクリックして実行した場合のカレントディレクトリーを制御するのは、 難しいかも知れませんので、別の方法として、ファイルを絶対パスで書く方法を書きます。 こうすればカレントディレクトリーの問題は考えなくても良くなります。 ファイルがいずれも`C:\Users\argius\`フォルダーの下に置くとしたら、 ``` open(my $fh, "<", 'C:\Users\argius\input.txt') or die("error :$!"); # (中略) open(DATAFILE, ">", 'C:\Users\argius\output.txt') or die("Error:$!"); ``` のようにします。 ※`\`(バックスラッシュ)を使うので、この場合はダブルクォーテーション(`"`)でなく、シングルクォーテーション(`'`)を使う方が楽です。ダブルクォーテーションで書く場合は、`\\`のようにすべてのバックスラッシュ二重に書く必要があります。 (これで解決で良ければ、追加の質問は回答していただかなくてかまいません。) もし上記の方法がダメなら、batファイルを作ってそれをダブルクリックという方法もあります。