拆分单独的行以创建文件名



我对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;
    }
}

最新更新