1

誰かが私を助けることができますか?

これが私の記録です:

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

これが私が欲しかったサンプル出力です。

Client1|fiswt|36214|784423|21 March 2013|Office|Level 9 83 Clarence Street|Transout|Cash|6904.29|$2.32|$16,000.00|closingtot|$236,313.84
Client1|fiswt|36214|784423|21 March 2013|Office|Level 9 83 Clarence Street|Transout|Cash|6904.29|$2.32|$16,000.00|closingtot|$236,313.84
Client1|fiswt|36214|784423|21 March 2013|Office|Level 9 83 Clarence Street|Transout|Cash|6904.29|$2.32|$16,000.00|closingtot|$236,313.84

私は実際にこのソリューションを持っています:

chomp($line) unless($line =~ /^Closing/i);

ただし、各行の最後に出力に問題がある場合は、パイプ (|) を追加する必要があります。

このような

$16,000.00|決算|$236,313.84

4

4 に答える 4

1

これは、ニーズに合ったスクリプトです。

use strict;
use warnings;
my $line = '';
while(<DATA>) {
    if( /^\S/ ) {
        chomp;
        $line .= '|' if $line ne '';
        $line .= $_ 
    }
    else {
        print $line, "\n";
        $line = '';
    }
}
print $line, "\n" if($line);

__END__
Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84
于 2013-07-05T06:37:19.170 に答える
0

データを段落として読み取り、スペースをフィールド区切り記号に置き換えます。

#!/usr/bin/env perl

use strict;
use warnings;

# --------------------------------------
# Modules

use English qw( -no_match_vars );

# --------------------------------------
#       Name: read_paragraph
#      Usage: $paragraph = read_paragraph( \*fh );
#    Purpose: Read the next paragraph from the file handle
# Parameters:       \*fh -- The file handle to read from
#    Returns: $paragraph -- the paragraph
#
sub read_paragraph {
  my $fh = shift @_;

  local $INPUT_RECORD_SEPARATOR = "\n\n";
  my $paragraph = readline( $fh );

  return $paragraph;
}

# --------------------------------------
# Main

while( my $para = read_paragraph( \*DATA )){
  $para =~ s{ \s+ }{|}gmsx;
  $para =~ s{ (?> \| )+ \z }{}msx;
  print "$para\n";
}


__DATA__
Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84

Client1|fiswt|36214|784423|21 March 2013
Office|Level 9 83 Clarence Street
Transout|Cash|6904.29|$2.32|$16,000.00
closingtot|$236,313.84
于 2013-07-05T14:34:42.597 に答える