各行が 1 つの要素のみである .txt ファイルがあります。件名のとおり、.txt の 1 行目を入力したいと思います。次に、入力したらすぐに .txt ファイルから削除したいと思います。同時に、前の 2 行目の要素が新しい最初の行になるように、各要素を 1 行ずつ上にスライドさせたいと思います。
次の先に進む方法がよくわかりません: open( my $l, '<', 'Input.txt' ) または die "Input.txt を開けません: $!";
各行が 1 つの要素のみである .txt ファイルがあります。件名のとおり、.txt の 1 行目を入力したいと思います。次に、入力したらすぐに .txt ファイルから削除したいと思います。同時に、前の 2 行目の要素が新しい最初の行になるように、各要素を 1 行ずつ上にスライドさせたいと思います。
次の先に進む方法がよくわかりません: open( my $l, '<', 'Input.txt' ) または die "Input.txt を開けません: $!";
を使用すると、配列内の各要素がファイル内の行に対応するように、ファイルを に関連付けるTie::File
ことができます。@array
次の例では、shift
演算子は から最初の要素を削除し、@lines
それを に割り当て$first_line
ます。@lines
そのファイルの最初の行に関連付けられているためfile.txt
、 も削除されます。
use strict;
use warnings;
use Tie::File;
tie my @lines, 'Tie::File', 'file.txt' or die $!;
my $first_line = shift @lines;
print "first line WAS: $first_line\n";
untie @lines;
別のオプションは次のとおりです。
use strict;
use warnings;
use File::Slurp;
my $i = 0;
write_file $ARGV[0], grep $i++, read_file $ARGV[0];
使用法:perl script.pl inFile
スクリプトはリスト コンテキストでFile::Slurpgrep
を使用し、0 でない場合にのみ行が通過できるよう$i
にするため、最初の行が省略され、行 2 .. n がファイルに書き戻されます。
お役に立てれば!