gpt4 book ai didi

arrays - 将文件读入多维数组并跳过包含 Perl 中某些信息的行的最佳方法

转载 作者:行者123 更新时间:2023-12-04 07:38:23 28 4
gpt4 key购买 nike

我是 Perl 编码的新手,遇到了一个我找不到解决办法的问题。
我正在尝试读取一个文件并将信息放入一个多维数组中,这工作正常,但是我需要将文件中的某些行跳过添加到数组中。
我正在使用的代码如下所示:

sub read_files {
@fields = ();
open($input_data, '<', $file) or die "Could not open '$file' $!\n"; # Open the CSV file and read its contents, if the file cannot be opened display an error and exit the program
while (<$input_data>) # While there is data to be read
{
chomp;
push @fields, [split /\s+/];
}
}
我想跳过的文件中的行如下所示:
121    0 -blank-                 BlockSize=2048 BlockCount=536516096 MediumType=10 Location=121/1/1 BlockAddressable=0 fsCapability=iso                     -          -          HD-WO vol1
344 0 --bad-- BlockSize=0 BlockCount=0 MediumType=0 Location=344/1/1 BlockAddressable=0 - - - icas

770 0 -XXXXX- - - - HD-WO icas

有效行看起来与此类似:
 753 1060 EY_icas_0416G           BlockSize=2048 BlockCount=1550534 MediumType=10 Location=753/1/1 BlockAddressable=0 PhysBlockCount=1550534 state=regular   1572740385 1793466337 HD-WO icas
754 1061 NG_icas_0186I BlockSize=2048 BlockCount=445776 MediumType=10 Location=754/1/1 BlockAddressable=0 PhysBlockCount=445776 state=regular 1572741506 1793391106 HD-WO icas
755 1062 GJ_icas_0060E BlockSize=2048 BlockCount=230419 MediumType=10 Location=755/1/1 BlockAddressable=0 PhysBlockCount=230419 state=regular 1572746004 1793444405 HD-WO icas

任何帮助将非常感激
另外在使用 [split /\s+/]; 时要在有空格时拆分读取的行,如何在列表中添加逗号“,”?

最佳答案

OP的问题不完整。
OP 应指定更完整的数据样本,并指示应跳过哪些行。
以下代码示例基于提供的数据,但由于问题中缺少重要信息,可能远非理想的解决方案。
用于代码定义的正则表达式中的演示目的 $skip_pattern跳过以 # 开头的行象征。
空行也被跳过作为健全性检查。

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my @data;
my $skip_pattern = qr/^#/;

while( <DATA> ) {
next if /^\s+\z/;
next if /$skip_pattern/;
push @data, [split /[\s,]+/];
}

say Dumper(\@data);

exit;

__DATA__
# Sample data
121 0 -blank- BlockSize=2048 BlockCount=536516096 MediumType=10 Location=121/1/1 BlockAddressable=0 fsCapability=iso - - HD-WO vol1
# Line to skip
122 1 -blank- BlockSize=4096 BlockCount=536516096 MediumType=10 Location=121/1/1 BlockAddressable=0 fsCapability=iso - - HD-WO vol1
输出
$VAR1 = [
[
'121',
'0',
'-blank-',
'BlockSize=2048',
'BlockCount=536516096',
'MediumType=10',
'Location=121/1/1',
'BlockAddressable=0',
'fsCapability=iso',
'-',
'-',
'HD-WO',
'vol1'
],
[
'122',
'1',
'-blank-',
'BlockSize=4096',
'BlockCount=536516096',
'MediumType=10',
'Location=121/1/1',
'BlockAddressable=0',
'fsCapability=iso',
'-',
'-',
'HD-WO',
'vol1'
]
];

关于arrays - 将文件读入多维数组并跳过包含 Perl 中某些信息的行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67628487/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com