gpt4 book ai didi

arrays - 根据关键字将文件内容拆分为 2 个数组

转载 作者:行者123 更新时间:2023-12-01 07:39:36 25 4
gpt4 key购买 nike

我有一个类似的文件

line1
line2
line3
line4
.endm
line5
line6
line7
line8
.endm

我想在 .endm 拆分此文件并将内容放在 2 个不同的数组中。输出将是
@array1=(line1,line2,line3,line4);
@array2=(line4,line6,line7,line8);

我尝试使用
@array = split(".endm",my_file.txt);
print("Array1 = $array[1]\nArray2 = $array[2]\n);

但这只是打印出最后一个 .endm 的行号

我也尝试过类似的东西
#! /usr/intel/bin/perl -w
use strict;

my $count=0;
open(my $fh, "<", "a.txt")|| die "can't open UTF-8 encoded filename: $!";
my @lines = <$fh>;
my @array;

LOOP: foreach my $line (@lines) {
chomp ($line);
$count = $count+1;
push (@array,$line);
if ($line =~ m/.endm/) {
pop (@array);
last LOOP;
}
}
print("Array : @array\n");
close $fh;

这一张打印 @array=(line1,line2,line3,line4);但我仍然需要其他 4 行,以便我可以将它放在不同的数组中

那么如何根据某个关键字拆分文件呢?

最佳答案

如果你有一个固定的字符串作为字段分隔符,你可以设置内置变量$/ -- 输入记录分隔符 -- 改变 Perl 的方式 readline()函数读取行。

perl -MData::Dumper -we '$/=".endm\n"; chomp(@a = <>); 
@a = map [ split /\n/ ], @a; print Dumper \@a;' file.txt

这将读取两个块中的文件,有效地拆分 .endm\n .请注意 chomp删除 $/ 的值从字符串的末尾。 map此处的语句只是在换行符上拆分输入并将其放入数组 ref 中。结果数组是二维的,如 Data::Dumper 所示输出:

输出:
$VAR1 = [
[
'line1',
'line2',
'line3',
'line4'
],
[
'line5',
'line6',
'line7',
'line8'
]
];

完整版如下所示:
use strict;
use warnings;
use Data::Dumper;

$/ = ".endm\n";
chomp(my @a = <>);
@a = map [split /\n/], @a;
print Dumper \@a;

关于arrays - 根据关键字将文件内容拆分为 2 个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923341/

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