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

时间:2017-04-04 12:56:20

标签: perl

我是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总是一样的,但我认为必须有一种更简单的方法来搜索和提取这两个值。任何帮助深表感谢。感谢。

1 个答案:

答案 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;
    }
}