Macの青色申告をHackするの続き

こないだに引き続き、今度は科目別に書き出してみました。

use v5.10;
use strict;
use warnings;
use utf8;
binmode STDOUT, ':utf8';

my $in_file = 'test.tab';
my $data_ref = load_tab_file( $in_file );

say "件数 = " . scalar(@{$data_ref});

my %hash = ();
foreach my $line (@{$data_ref}) {
    my @tmp = split "\t", $line;
    if ( not exists $hash{$tmp[3]} ) {
        $hash{$tmp[3]} = [];
    }

    push @{$hash{$tmp[3]}}, \@tmp;
}

foreach my $kind (keys %hash) {
    my $out_file = $kind . '.txt';
    write_tab_file( $out_file, $hash{$kind} ); 
}

sub write_tab_file {
    my $file = shift;
    my $array_ref = shift;

    my @data = sort {
        $a->[1] cmp $b->[1];
    } @{$array_ref};

    say "write! " . $file;

    open( my $fh, '>:encoding(shift-jis)', $file ) or die $!;
    foreach (@data) {
        print $fh join("\t", @{$_}) . "\r";
    }

    close $fh;
}

sub load_tab_file {
    my $file = shift;

    local $/ = "\r";
    open( my $fh, '<:encoding(shift-jis)', $file ) or die $!;

    my @ret = <$fh>;
    chomp @ret;

    close $fh;

    return \@ret;
}

これを実行すると、

$ perl aaa.pl
件数 = 122
write! 一括償却資産.txt
write! 旅費交通費.txt
write! 事務用品費.txt


みたいな感じで、ファイルが出力されます。

これで、ちょっとは見れなくもない感じになりましたかね!

おしまい。

Leave a Comment