在Perl中将第一个文件的头添加到所有其他拆分文件中
我需要将第一个主文件的头添加到所有拆分文件中。i、 我可以得到第一个分割文件的头,但我需要它的所有分割文件,这里我分割DAT文件。以下是我这样做的原因:在Perl中将第一个文件的头添加到所有其他拆分文件中,perl,Perl,我需要将第一个主文件的头添加到所有拆分文件中。i、 我可以得到第一个分割文件的头,但我需要它的所有分割文件,这里我分割DAT文件。以下是我这样做的原因: #!usr/bin/perl -w my $chunksize = 25000000; # 25MB my $filenumber = 0; my $infile = "Test.dat"; my $outsize = 0; my $eof = 0; my $line = $_; open INFILE, $
#!usr/bin/perl -w
my $chunksize = 25000000; # 25MB
my $filenumber = 0;
my $infile = "Test.dat";
my $outsize = 0;
my $eof = 0;
my $line = $_;
open INFILE, $infile;
open OUTFILE, ">outfile_".$filenumber.".dat";
while (<INFILE>) {
chomp;
if ($outsize > $chunksize) {
close OUTFILE;
$outsize = 0;
$filenumber++;
open (OUTFILE, ">outfile_".$filenumber.".dat")
or die "Can't open outfile_".$filenumber.".dat";
}
print OUTFILE "$_\n";
$outsize += length;
}
close INFILE;
#!usr/bin/perl-w
我的$chunksize=25000000;#25MB
我的$filenumber=0;
my$infle=“Test.dat”;
我的$outsize=0;
我的$eof=0;
我的$line=$\ux;
打开infle,$infle;
打开OUTFILE,“>OUTFILE..”$filenumber.“.dat”;
而(){
咀嚼;
如果($outsize>$chunksize){
关闭输出口;
$supersize=0;
$filenumber++;
打开(OUTFILE,“>OUTFILE.”..$filenumber.“.dat”)
或者死在“无法打开输出文件”.$filenumber.“.dat”;
}
打印输出文件“$\n”;
$OVERSIZE+=长度;
}
封闭填充;
您需要存储输入文件的标题,并在每次打开新文件时打印它:
use strict;
use warnings;
use autodie;
# initializations ...
open my $in, '<', $infile;
open my $out, '>', "outfile_${file_number}.dat";
my $header = <$in>; # Save the header...
chomp $header; # ... not strictly necessary
while ( <$in> ) {
chomp; # Not strictly necessary
if ( $outsize > $chunksize) {
close $out;
$outsize = 0;
$filenumber++;
open $out, '>', "outfile_${file_number}.dat";
print $out $header, "\n"; # Prints header at beginning of file
# Newline needed if $header chomped
}
print $out $_, "\n"; # Newline needed if $_ chomped
$outsize += length;
}
使用严格;
使用警告;
使用自动模具;
#初始化。。。
打开我的$in,,“outfile${file_number}.dat”;
我的$header=#保存标题。。。
chomp$header;#。。。不完全必要
而(){
chomp;#严格说来没有必要
如果($outsize>$chunksize){
收尾美元;
$supersize=0;
$filenumber++;
打开$out,'>',“outfile${file_number}.dat”;
打印$out$头文件“\n”#在文件开头打印头文件
#如果$header被选中,则需要换行符
}
打印$out$u200;,“\ n”#如果选择$200;则需要换行符
$OVERSIZE+=长度;
}
您需要存储输入文件的标题,并在每次打开新文件时打印它:
use strict;
use warnings;
use autodie;
# initializations ...
open my $in, '<', $infile;
open my $out, '>', "outfile_${file_number}.dat";
my $header = <$in>; # Save the header...
chomp $header; # ... not strictly necessary
while ( <$in> ) {
chomp; # Not strictly necessary
if ( $outsize > $chunksize) {
close $out;
$outsize = 0;
$filenumber++;
open $out, '>', "outfile_${file_number}.dat";
print $out $header, "\n"; # Prints header at beginning of file
# Newline needed if $header chomped
}
print $out $_, "\n"; # Newline needed if $_ chomped
$outsize += length;
}
使用严格;
使用警告;
使用自动模具;
#初始化。。。
打开我的$in,,“outfile${file_number}.dat”;
我的$header=#保存标题。。。
chomp$header;#。。。不完全必要
而(){
chomp;#严格说来没有必要
如果($outsize>$chunksize){
收尾美元;
$supersize=0;
$filenumber++;
打开$out,'>',“outfile${file_number}.dat”;
打印$out$头文件“\n”#在文件开头打印头文件
#如果$header被选中,则需要换行符
}
打印$out$u200;,“\ n”#如果选择$200;则需要换行符
$OVERSIZE+=长度;
}
- 您应该始终
(优先于命令行使用警告
)和-w
。这样,许多简单的错误,您可能已经obverlook将被标记使用严格的
- 将三参数形式的
与词法文件句柄一起使用open
- 检查所有打开调用的结果,并标记包含
$值的错误代码>在
字符串模具中
- 使用
将常量
pragma作为Perl变量来定义常量值
- 打印到文件句柄的字节数可以使用
函数计算,因此无需保留自己的计数tell
打开
输出文件,并且在文件已满或已到达输入数据末尾时关闭
输出文件,则更容易跟踪输出文件
该程序演示了这些想法,并完成了所需的工作
use strict;
use warnings;
use constant INFILE => 'Test.dat';
use constant CHUNKSIZE => 25_000_000; # 25MB
open my $infh, '<', INFILE or die $!;
my $header = <$infh>;
my $outfh;
my $filenumber = 0;
while (my $line = <$infh>) {
unless ($outfh) {
my $outfile = "outfile_$filenumber.dat";
open $outfh, '>', $outfile or die "Can't open '$outfile': $!";
print { $outfh } $header;
$filenumber++;
}
print { $outfh } $line;
if (tell $outfh > CHUNKSIZE or eof $infh) {
close $outfh or die $!;
undef $outfh;
}
}
使用严格;
使用警告;
使用常量infle=>Test.dat';
使用常量CHUNKSIZE=>25_000_000;#25MB
打开我的$infh、、$outfile或die“无法打开$outfile:$!”;
打印{$outph}$header;
$filenumber++;
}
打印{$outph}$行;
如果(告诉$OUTH>CHUNKSIZE或eof$infh){
关闭$outph或死亡$!;
undef$OUTH;
}
}
- 您应该始终
(优先于命令行使用警告
)和-w
。这样,许多简单的错误,您可能已经obverlook将被标记使用严格的
- 将三参数形式的
与词法文件句柄一起使用open
- 检查所有打开调用的结果,并标记包含
$值的错误代码>在
字符串模具中
- 使用
将常量
pragma作为Perl变量来定义常量值
- 打印到文件句柄的字节数可以使用
函数计算,因此无需保留自己的计数tell
打开
输出文件,并且在文件已满或已到达输入数据末尾时关闭
输出文件,则更容易跟踪输出文件
该程序演示了这些想法,并完成了所需的工作
use strict;
use warnings;
use constant INFILE => 'Test.dat';
use constant CHUNKSIZE => 25_000_000; # 25MB
open my $infh, '<', INFILE or die $!;
my $header = <$infh>;
my $outfh;
my $filenumber = 0;
while (my $line = <$infh>) {
unless ($outfh) {
my $outfile = "outfile_$filenumber.dat";
open $outfh, '>', $outfile or die "Can't open '$outfile': $!";
print { $outfh } $header;
$filenumber++;
}
print { $outfh } $line;
if (tell $outfh > CHUNKSIZE or eof $infh) {
close $outfh or die $!;
undef $outfh;
}
}
使用严格;
使用警告;
使用常量infle=>Test.dat';
使用常量CHUNKSIZE=>25_000_000;#25MB
打开我的$infh、、$outfile或die“无法打开$outfile:$!”;
打印{$outph}$header;
$filenumber++;
}
打印{$outph}$行;
如果(告诉$OUTH>CHUNKSIZE或eof$infh){
关闭$outph或死亡$!;
undef$OUTH;
}
}
假设块大小较小,您能给我们提供示例输入和预期输出吗?请添加pragma使用strict代码>到你的脚本你能给我们一个例子输入和预期输出,假设一个较小的块大小吗?请添加pragma使用strict代码>到您的脚本我将避免咀嚼,这样您在打印时就不需要“\n”out@justintime:因此,如果打印时不需要“\n”,则“非严格必需”注释可以避免咀嚼out@justint