#Perl言語
use strict;
use warnings;
use utf8;
use open ":utf8";
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';
my @syusei;
my $n = 0;
my $j=0;
my $m=0;
open(my $fh, "<", "input.txt") or die("error :$!");
while (my $buff = <$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<length($syusei[$m]);$i++){
chomp($syusei[$m]);
my $onestr= substr($syusei[$m],$i,1);
if($onestr eq "z"){
substr($syusei[$m],$i,1)=chr(97); #z⇒aに
} elsif($onestr eq "Z"){
substr($syusei[$m],$i,1)=chr(65); #Z⇒Aに
} elsif($onestr =~ /[a-y]/) { #aからyのいずれかの文字
my $charno= ord($onestr);
substr($syusei[$m],$i,1)=chr(++$charno); #一文字ずらすa⇒b…y⇒z
} elsif($onestr =~ /[A-Y]/) { #AからYのいずれかの文字
my $charno= ord($onestr);
substr($syusei[$m],$i,1)=chr(++$charno); #一文字ずらすA⇒B…Y⇒Z
}
}
$syusei[$j]="$syusei[$m]\n";
$j++
}
open(DATAFILE,">","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
回答1件
あなたの回答
tips
プレビュー