首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个文件分成几个小文件

将一个文件分成几个小文件
EN

Stack Overflow用户
提问于 2015-08-12 07:04:38
回答 1查看 73关注 0票数 0

我有一个代码,允许我处理一个文件,在该代码中,他查找以"false“开头的所有行,并将它们返回给我。

我希望每一行都用"false“存储在文件中,即。

代码语言:javascript
复制
#!/usr/bin/perl

use warnings;
use strict;
open(DATA, '<', 'DATA.csv');
my @a = <DATA>;
my @b = grep(/false/, @a);
chomp(@b);
for (my $i=0; $i <= $#b; $i++) {
    print $i + 1;
    print ". ";
    print split('false',"$b[$i]\n");
}

__________________DATA____________________________________

代码语言:javascript
复制
    2015.07.23  16:47:23
                  false,    false,       true,      false,    true,    false,
          defau,  ame_a,    ame_m,       ame_uc,     ame_f,    ams_l,  en_affi,
    true  DPA01,  fault,    fault,       fault,      fault,    fault,      1,
    false DPA02,  dfgeh,         ,            ,           ,    fault,      1,
    true  DPA03,  fault,    fault,         olt,      fault,    fault,      1,
    false DPA01,  fault,       at,       fault,          2,    fault,      1,
    false DPA02,  dfgeh,         ,            ,           ,    fault,      1,
    true  DPA03,  fault,    fault,         olt,      fault,    fault,      1,

___DPA02___________________

代码语言:javascript
复制
dfgeh



fault
1

___DPA01________________

代码语言:javascript
复制
fault
at
fault
2
fault
1

___DPA02_____________

代码语言:javascript
复制
dfgeh



fault
1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 08:12:51

我觉得你想做的是:

  1. 从CSV文件中读取一行。
  2. 如果它以‘false’开头:
    1. 提取所有的列。
    2. 使用列2的内容作为名称打开文件。
    3. 将行中的其余项目写入该文件,每行一项。

你在那里的程序根本不会那么做。

我首先建议,如果您想安全地处理CSV文件,请使用CPAN中的文本::CSV模块。如果这样做,这个过程就会变得简单得多:

代码语言:javascript
复制
use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new;
open my $csv_file, "<", "DATA.csv" or die "Can't open CSV file: $!\n";
while (my $row = $csv->getline($csv_file)) {
    # First item is significator plus filename.
    my($significator_and_file) = clean($row->[0]);
    my ($significator, $file) = split /\s+/, $significator_and_file;
    next unless $significator and $significator eq 'false';

    open my $per_line_fh, ">>", $file or die "Can't open per-line file $file: $!\n";

    # One item per line, plus final newline.
    shift @$row;
    print $per_line_fh join "\n", map { clean($_) } @$row;
    print $per_line_fh "\n";
    close $per_line_fh;
}

sub clean {
    my $string = shift;
    $string =~ s/^\s+//;
    $string =~ s/\s+$//;
    return $string;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31958194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档