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でも大丈夫そうってことですね。
では、良い入力を。
Leave a Comment