ファイル自体の内容に基づいてファイルセットの名前を変更しようとしています。作業が完了すると、名前を変更する必要があるファイルが1000個を超えます。ファイル名の最初の部分を取得するコードがありますが、ファイル名に別の要素を含める必要があります。これは私が毎日他のタスクで使用するコードの最初の部分です。
# open(INFILE,"list.txt") or die "could not open file for reading!\n";
open(OUTFILE, '>forecast_mips.txt') or die "Cannot open forecast.txt: $!";
my @output;
while(<INFILE>) {
chomp;
next if /^\s*$/;
my @fields = split;
foreach my $field (@fields) {
push @output, $field
if $field =~ /^\*?[ABMQRWY][A-Z0-9]{4}235/;
}
foreach my $field1 (@fields
}
print OUTFILE join("\n", @output), "\n";
print join(@output),"\n";
ただし、ファイル名に他の2つの要素を含めようとしています。ファイルには上記のコードで生成されたジョブ名が含まれていますが、ジョブ番号(5桁)と実行日(5桁のJulian固定日付)も必要です。以下は文書の基礎です。太字は私が必要とするファイル名です。日付はユリウス暦の日付でなければなりません(この場合は22356)。したがって以下の内容ではファイル名が D47YC235#03618-22356 となります。次の項目を検索してファイル名を設定するより良い方法があるかどうかはわかりません。 if $field =~ 行はファイルから D47YC235 を生成します。
00.55.30 JOB03618 ICH70001I $$MP235 LAST ACCESS AT 00:55:30 ON THURSDAY, **DECEMBER 22, 2022**
00.55.30 JOB**03618** $HASP373 **D47YC235** STARTED - INIT 39 - CLASS R - SYS V4YM
答え1
ファイルがフォーマットする2行で始まり、コマンドラインにその名前があると仮定すると、TxR名前変更を計算する手順は次のとおりです。
$ txr data.txr data
rename data -> D47YC235#03618-22356
$ txr data.txr data data data data
rename data -> D47YC235#03618-22356
rename data -> D47YC235#03618-22356
rename data -> D47YC235#03618-22356
rename data -> D47YC235#03618-22356
プログラムはどこにありますかdata.txr
?
@(next :args)
@(repeat)
@filename
@ (next filename)
@nil JOB@job @nil @nil LAST ACCESS AT @time ON @wday, @date
@nil JOB@job @nil @code @nil
@ (bind newname `@code#@job-@{(time-parse "%b %d, %Y" date).(time-string "%y%j")}`)
@ (do (put-line `rename @filename -> @(path-cat (dir-name filename) newname)`))
@(end)
これは参照用に実際には実行せず、シェルコマンド構文の名前変更のみを印刷します。実際に名前を変更するには、rename-path
TXR Lispの機能を使用できます。
@ (do (rename-path filename (path-cat (dir-name filename) newname)))
job
これらの2行から変数を抽出したことに注意してください。これがまさに逆参照です。 2つの位置が一致する必要があります。それ以外の場合はファイルをスキップします。
Vimの構文を強調したコード: