Macの青色申告で仕訳データを取り込む

なんのことは無かったです。
文字コードもUTF-8で良さそう。

こんなコードを書いて、書き出しデータと揃えてみました。
結果的に、ここまでする必要はなかったです。

※11行目は、書き出しフォーマット同様のタブ区切りです!

use v5.14;
use strict;
use warnings;
use utf8;
use FindBin;

my $yyyy = 2013;
my $data_dir = $FindBin::Bin . '/' . $yyyy;

my %templates = (
    book => '	date	241	新聞図書費	price	3	課税仕入等	書籍代	100	現金	price'
);

write_data( 'import/01_book.tab', load_csv('book.txt'), $templates{book} );

sub load_csv {
    my $file = shift;

    my $in_file = $data_dir . '/' . $file;
    open(my $fh, $in_file) or die $! . " : cannot open $in_file";
    my @lines = <$fh>;
    close $fh;

    my @data = ();
    foreach (@lines) {
        if ( my ($MM, $dd, $price) = /(1?\d)\/([1-3]?\d),(\d{4})/ ) {
            my $date = sprintf( "%04d/%02d/%02d", $yyyy, $MM, $dd );
            push @data, { date => $date, price => $price };
        }
        else {
            chomp( my $tmp = $_ );
            say $tmp, ' <<< wrong!';
        }
    }

    return \@data;
}

sub write_data {
    my $file = shift;
    my $data_ref = shift;
    my $template = shift;

    local $\ = "\r";
    open my $fh, '>:encoding(shift-jis)', $file or die $! . " : cannot open $file";
    foreach (sort { $a->{date} cmp $b->{date} } @{$data_ref}) {
        my $date = $_->{date};
        my $price = $_->{price};
        print $fh $template =~ s/price/$price/gr =~ s/date/$date/gr;
    }
    close $fh;
}

入力は、”book.txt”で、出力先は”import”フォルダにしました。

.
├── 2013
│   └── book.txt
├── import
└── update.pl

“book.txt”のフォーマットはこんな感じ。
$ cat book.txt
5/28,2625
5/28,3360
3/11,3780


あと、置換の連鎖が便利なので、使ってみました。(*1)

こんな感じで実行すると、”import”フォルダに”01_book.tab”ができます。
$ perl update.pl

では、取り込んでみます。

  • 「メンテナンス」ボタンをクリック
  • 「仕訳データの取り込み」ボタンをクリック
  • 「取込み」ボタンをクリック
  • 「タブ区切りテキストファイル」を選択して、”01_book.tab”を選択

仕訳データの取り込み

やってみると分かるのですが、文字コードも選べます。
あと、書き出し時と同じ順である必要もないです。
さらに、貸方/借方の科目名も不要です。
貸方/借方の科目コードがあれば要らないという意味です。

こんな感じで、どの列をどの項目に入れるか、
この列は不要とか、この項目には何も入れないみたいなのを設定します。
ちなみに、項目の移動や入れ替えは、ドラッグ操作で行えます。
あと、矢印みたいな記号はクリックすることで変化します。
この矢印みたいな記号の凡例は右下にあります。

帳簿に追加するには、「反映」ボタンをクリックする必要があるので、
「インポート」ボタンをクリックしても追加されません。
なので、意図した通りに取り込めるまで何度でもやり直せます。

分かったことは、科目名が要らないのと、
タブ区切りじゃなくても良いのと、UTF-8でも大丈夫そうってことですね。

では、良い入力を。

(*1) Perl の正規表現のチュートリアル(perldoc.jp)

Leave a Comment