Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于通过将字符匹配为多个文件来拆分单个文件的perl代码_Perl - Fatal编程技术网

用于通过将字符匹配为多个文件来拆分单个文件的perl代码

用于通过将字符匹配为多个文件来拆分单个文件的perl代码,perl,Perl,我想将一个大数据文件拆分为多个文件,只要它匹配一个“^”字符 #!/usr/bin/perl -w use strict; print "enter the data file name"; chomp( my $a=<STDIN> ); open (<READ>,"$a")| "error"; while ($line=<READ>) { my @array=split(" ",$line) unless ^

我想将一个大数据文件拆分为多个文件,只要它匹配一个“^”字符

#!/usr/bin/perl -w  
use strict;  
print "enter the data file name";  
chomp( my $a=<STDIN> );  
open (<READ>,"$a")| "error";  
while ($line=<READ>)  
 {  
  my @array=split("        ",$line) unless ^ ;  
#/usr/bin/perl-w
严格使用;
打印“输入数据文件名”;
chomp(我的$a=);
打开(,“$a”)|“错误”;
而($line=)
{  
my@array=split(“,$line),除非^;
数据文件拆分后,将创建总共23个文件

使用严格;
use strict;

open(FILE,'AUTOSAR.txt');
local $/;
my $var = <FILE>;
my @arr = split('\^',$var);
my $i=0;

foreach (@arr) {
    $i++;
    open(FILE1,">$i.txt");
    print FILE1 $_;
    close FILE1;
}

close FILE;
打开(文件“AUTOSAR.txt”); 本地$/; 我的$var=; my@arr=split('\^',$var); 我的$i=0; foreach(@arr){ $i++; 打开(文件1,“>$i.txt”); 打印文件1$; 关闭文件1; } 关闭文件;
$,=”;
$"="";
我的$i=1;
打开“>DATA_${i}.txt”;
while(){
咀嚼;
my@F=拆分(/\^/);
如果(@F==1){
打印出美元,“\n”;
}
elsif(@F>1){
$i++;
收尾;
打开“>DATA_${i}.txt”;
打印出“@F[1..$#F]\n”;
}
}
收尾;

这是一个经过清理和测试的saiprathapreddy.obula程序版本

use strict;
use warnings;

open(FILE,'AUTOSAR.txt');

local $/;
my $var = <FILE>;
close FILE;

my @arr = split('\^',$var);
my $i=0;

foreach (@arr) {
    $i++;
    open(FILE1,">$i.txt");
    print FILE1;
    close FILE1;
}
使用严格;
使用警告;
打开(文件“AUTOSAR.txt”);
本地$/;
我的$var=;
关闭文件;
my@arr=split('\^',$var);
我的$i=0;
foreach(@arr){
$i++;
打开(文件1,“>$i.txt”);
打印文件1;
关闭文件1;
}

这里有一个与saiprathapreddy.obula略有不同的答案:

use warnings;
use strict;

my ($file) = @ARGV;

open(my $input, "<$file");

local $/ = "^";

my $i = 0;

while(<>){
    chomp;

    $i++;

    open(my $output, ">file$i.txt");
    print $output "$_"; 
}
使用警告;
严格使用;
我的($file)=@ARGV;
打开(我的$input,“文件$i.txt”);
打印$output“$”;
}

您没有提供足够的信息。您希望如何命名输出文件?为什么要拆分行?匹配
^
最简单的方法是
$line=~/\^/
。您希望包含
^
的行放在旧文件中还是新文件中?或者一部分放在一个文件中,另一部分放在另一个文件中?可以命名文件在任何wa中,比如file1 file2……。我想将我的大文件存储到较小的文件中,文件的断点是“^“这是行将读取此字符的地方,它将中断,其余数据将存储在一个新文件中。此解决方案的问题是它会丢失插入符号字符,但如果存在类似于
abc^def^ghi
的行,仍然不清楚其目的是什么。”。您的程序将把
abc
放在上一个文件中,然后下一个文件将有
defghi
。可以说,应该有另一个文件只包含
def
。否则,我认为你的解决方案有效。为了说明这一点,这段代码将整个文件压缩成一个变量
$var
,它通过
local$/,将行尾字符设置为未定义。然后它在
^
上拆分,并将每个片段从
0.txt
开始写入一个单独的文件。如果它是一个非常大的文件,唯一需要考虑的是内存占用。此外,只要读入
$var
,您就可以
关闭文件。
use warnings;
use strict;

my ($file) = @ARGV;

open(my $input, "<$file");

local $/ = "^";

my $i = 0;

while(<>){
    chomp;

    $i++;

    open(my $output, ">file$i.txt");
    print $output "$_"; 
}