代码之家  ›  专栏  ›  技术社区  ›  derigel

Perl中的split有什么选择?[关闭]

  •  -5
  • derigel  · 技术社区  · 5 年前

    我的文件包含

    a: b
    d: e
    f: a:b:c
    g: a
       b
       c
       d
       f:g:h
    h: d
       d:dd:d
    J: g,j
    

    如何将此文件解析为一个数组中的左侧值和另一个数组中的右侧值?我试过分开,但还是没能把它拿回来。

    我想把它们放进土豆泥里。

    2 回复  |  直到 14 年前
        1
  •  2
  •   user181548    14 年前

    霍华兹:

    #!/usr/bin/perl
    use warnings;
    use strict;
    my $s = 
    q/a: b
    d: e
    f: a:b:c
    g: a
       b
       c
       d
       f:g:h
    h: d
       d:dd:d
       f
    /;
    open my $input, "<", \$s or die $!;
    my @left;
    my @right;
    while (<$input>) {
        chomp;
        my ($left, $right) = /^(.):?\s+(.*)$/;
        push @left, $left;
        push @right, $right;
    }
    print "left:", join ", ", @left;
    print "\n";
    print "right:", join ", ", @right;
    print "\n";
    
        2
  •  2
  •   Zaid    14 年前

    为什么不 split 工作?

    use strict;
    use warnings;
    
    open my $file, '<', 'file.txt';
    my %hash;
    
    while (my $line = <$file>) {
    
        my ( $left, $right ) = split /:/, $line, 2; # Splits only on the first colon
        $right =~ s/^\s+|\s+$//g;                   # Remove leading/ trailing spaces
        $hash {$left} = $right;                     # Populate hash
    }
    
    close $file;
    
    # print to test the output
    print (join ' => ', $_, $hash{$_}),"\n" foreach keys %hash;