我对Perl很陌生,有一段代码我正在尝试修改。它打开一个 txt 文件并查找序列号并使用序列号值重命名该文件。我也在尝试获取零件信息并将其附加到序列号前面。
这些文件如下所示:
999511.RPT
C:usersnametest
Program Name : Automation123
Part Number : A123987_2
Board # : 1
Serial # : 999511
Machine # : AX-976
Operator # : 98512
现在,我想浏览文件并提取部件号和序列号#并重命名文件。
所以我会遍历打开的文件,使用split
获取这两个值,文件将从999511.RPT
重命名为A123987_2-999511.RPT
(我还需要在这两个值之间添加-
(。
现在我们正在做一个Line_Count,因为这个 RPT 总是相同的,但我认为必须有一种更简单的方法来搜索和提取这两个值。任何帮助都非常感谢。谢谢。
您可以使用正则表达式来匹配键,并使用分组来提取值:
#! /usr/bin/perl
use warnings;
use strict;
my %extracted;
while (<>) {
if (my ($key, $value) = /^(Serial #|Part Number)s*:s*(.*)/) {
$extracted{$key} = $value;
}
}
rename $ARGV,
$extracted{'Part Number'} . '-' . $extracted{'Serial #'} . '.RPT'
or die $!;
如果要一次处理多个文件,可以使用 eof 来检测每个文件的末尾:
#! /usr/bin/perl
use warnings;
use strict;
my %extracted;
while (<>) {
if (my ($key, $value) = /^(Serial #|Part Number)s*:s*(.*)/) {
$extracted{$key} = $value;
}
if (eof) {
rename $ARGV,
$extracted{'Part Number'} . '-' . $extracted{'Serial #'} . '.RPT'
or die $!;
undef %extracted;
}
}