我是Perl的新手,并且有一段我想修改的代码。它打开一个txt文件并查找序列号,并使用序列号值重命名该文件。我也试图抓取零件信息并将其添加到序列号中。
文件看起来像这样:
999511.RPT
C:\users\name\test
Program Name : Automation123
Part Number : A123987_2
Board # : 1
Serial # : 999511
Machine # : AX-976
Operator # : 98512
现在,我想通过该文件并提取部件号和序列号并重命名该文件。
所以我会遍历打开的文件,使用split
抓取这两个值,然后将文件从999511.RPT
重命名为A123987_2-999511.RPT
(我还需要添加{这两个值之间的{1}}。
现在我们正在做一个Line_Count,因为这个RPT总是一样的,但我认为必须有一种更简单的方法来搜索和提取这两个值。任何帮助深表感谢。感谢。
答案 0 :(得分:2)
您可以使用正则表达式来匹配密钥,并使用分组来提取值:
#! /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;
}
}