gpt4 book ai didi

Perl 将文本文件分成 block

转载 作者:行者123 更新时间:2023-12-01 06:32:14 25 4
gpt4 key购买 nike

我有一个由数千篇文章组成的大型 txt 文件,我试图将它拆分成单独的文件 - 每个文件一个,我想将其另存为 article_1、article_2 等。每篇文章都以包含单词/DOCUMENTS/的行。我是 perl 的新手,任何见解都会很棒! (甚至是关于好的文档网站的建议)。非常感谢。到目前为止,我尝试过的是这样的:

#!/usr/bin/perl
use warnings;
use strict;

my $id = 0;
my $source = "2010_FTOL_GRbis.txt";
my $destination = "file$id.txt";

open IN, $source or die "can t read $source: $!\n";

while (<IN>)
{
{
open OUT, ">$destination" or die "can t write $destination: $!\n";
if (/DOCUMENTS/)
{
close OUT ;
$id++;
}
}
}
close IN;

最佳答案

假设 /DOCUMENTS/ 单独出现在一行中。因此,您可以将其设为记录 分隔符。

use English     qw<$RS>;
use File::Slurp qw<write_file>;
my $id = 0;
my $source = "2010_FTOL_GRbis.txt";

{ local $RS = "\n/DOCUMENTS/\n";
open my $in, $source or die "can t read $source: $!\n";
while ( <$in> ) {
chomp; # removes the line "\n/DOCUMENTS/\n"
write_file( 'file' . ( ++$id ) . '.txt', $_ );
}
# being scoped by the surrounding brackets (my "local block"),
close $in; # an explicit close is not necessary
}

注意事项:

  • use English 声明全局变量$RS。它的“乱七八糟的名字”是$/。参见 perldoc perlvar
  • 行分隔符是默认 记录 分隔符。即文件读取的标准单位是记录默认,这只是一条“线”。
  • 正如您将在链接的文档中找到的那样,$RS 仅采用文字字符串。因此,根据文章之间的分隔符是 '/DOCUMENTS/' 单独在一行上的想法,我指定了 newline + '/DOCUMENTS/' + newline。如果这是在线某处出现的路径的一部分,那么该特定值将不适用于记录分隔符。

关于Perl 将文本文件分成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11718967/

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