Skip to content
Takuya Murakami edited this page Dec 1, 2013 · 15 revisions

CSV 取り込み方式

CSV ファイルを Money に取り込む方式について

基本仕様

CSV ファイルを変換するための定義を定義ファイル(XMLファイル)に書いておいて、これを使って 変換をかける。

各定義には、銀行名、銀行番号、CSVの1行目の文字列、各フィールドのマッピングなどを記述。 CVS の1行目は、銀行を自動識別するための Ident として使う(1行目がない場合は省略する)

銀行の支店番号、口座番号が必要だが、これは銀行ごとに1個だけ記憶しておくようにする。 (2個以上にしたいことってある?)

定義ファイルは、以下のディレクトリに置く。

  • XP の場合 : C:\Documents and Settings\username\Local Settings\Application Data\tmurakam.org\FeliCa2Money
  • Window Vista/7 の場合 : C:\Users\username\AppData\Local\tmurakam.org\FeliCa2Money

定義ファイルは拡張子が .xml であればなんでもよく、いくつあっても全部読み込まれる。 FeliCa2Money 公式で配布する定義は CsvRules.xml というファイル名にする。このファイルは自動アップデートによりインストールする。 書き換えないこと。

個人定義は GUI でマッピングを設定できるようにするのがいいけど(年賀状ソフトで CSV 住所録から取り込みするようなイメージ)、 面倒なのでとりあえず後回しかな?

定義ファイルの書式

テキストエディタを使って書く。エンコーディングは UTF-8。ちなみに最新の定義は常にhttps://github.com/tmurakam/felica2money/raw/master/defs/CsvRules.xmlにある。

以下に例を示す。

なお、定義ファイルを作ったら作者までメールで送って下さい(アドレスは tmurakam@tmurakam.org)。公式に取り込みます。

<?xml version="1.0" encoding="UTF-8"?>
  <CsvRules>
    <Rule>
    <Ident>OFXConverter</Ident>
    <Name>OFXConverter互換</Name>
    <FirstLine>明細日,明細金額,Money摘要欄,Money備考欄</FirstLine>
    <Format>Date,Income,Desc,Memo</Format>
    <Order>Ascent</Order>
  </Rule>
 
  <Rule>
    <Ident>ebank</Ident>
    <Name>イーバンク</Name>
    <BankId>36</BankId>
    <FirstLine>取引日,入出金(円),残高(円),入出金先内容</FirstLine>
    <Format>Date,Income,Balance,Desc</Format>
    <Order>Ascent</Order>
  </Rule>
 
  <Rule>
    <Ident>JapanNetBank</Ident>
    <Name>ジャパンネット銀行</Name>
    <BankId>33</BankId>
    <FirstLine>"操作日(年)","操作日(月)","操作日(日)","取引順番号","摘要","お支払金額","お預り金額","残高"</FirstLine>
    <Format>Year,Month,Day,Id,Desc,Outgo,Income,Balance</Format>
    <Order>Ascent</Order>
  </Rule>
 
  <Rule>
    <Ident>SonyBank</Ident>
    <Name>ソニー銀行</Name>
    <BankId>35</BankId>
    <FirstLine>"お取り引き日","摘要","お預け入れ額","お引き出し額","差し引き残高"</FirstLine>
    <Format>Date,Desc,Income,Outgo,Balance</Format>
    <Order>Ascent</Order>
    <Separator>Comma</Separator>
  </Rule>
</CsvRules>

Ident は必ず一意の文字列にすること(他のと衝突すると嫌なことが起こる)

Name は、CSV形式選択ダイアログボックスに表示するので、ユーザがみてわかる文字列にする。

BankId は銀行番号。Google 先生で調べる。銀行じゃない場合は BankId エントリはなくてよい。

FirstLine には CSV の1行目にくる文字列を書く。この文字列は CSV フォーマットの自動選択に使う。 なお、1行目がないような CSV ファイルに対応する場合は、FirstLine エントリ自体を書かないようにすればよい。 この場合、CSV ファイルはきちんと1行目から読み込まれる。ただし、フォーマット自動選択は効かなくなるので、 ダイアログボックスで毎回選択する必要がある。

Format には、各 CSV のフィールドのマッピングを記載する :

  • Date : 日付 (2013/1/1, 130101, H25.1.1 など。認識できるフォーマットの詳細は後述。)
  • Year, Month, Day : 日付、年月日がフィールドわかれている場合
  • Id : 連番 (なければ FeliCa2Money が自分でつける)
  • Desc : 適用
  • Income : 入金額 (値が負の場合は出金とみなす)
  • Outgo : 出金額 (値が負の場合は入金とみなす)
  • Balance : 残高
  • Memo : 備考
  • Dummy : ダミー (このカラムは読み飛ばす)

このうち、Date または Year/Month/Day のいずれかは必須。Income/Outgoのいずれかは必須。 これらの情報が欠けていると OFX ファイルが正しく生成されません。これ以外のはなくても自動で補完します。

Order は CSV の並び順。Ascent だと昇順(日付順)、Descentだと降順(日付逆順)。 また、"Sort" を指定した場合、日付順に自動ソートする (ver 2.9以降)。取引が日付順になっていない場合のみ、これを指定すること。

Separator はフィールド区切り文字の指定。Comma だとカンマ(,)、Tab だとタブ文字(\t) となる。デフォルトはカンマ。

Date で認識可能なフォーマット

Date で認識できるフォーマットは以下のとおり。

  • 年、月、日が以下のように指定されているもの。
    • yyyy年mm月dd日
    • yyyy/mm/dd
    • yyyy.mm.dd
    • yyyy mm dd
    • yyyy-mm-dd
    • mm, dd は1桁でも可。
    • yyyy については、2013、13、H25 はすべて 2013年と認識する。
  • 月、日、年が以下のように指定されているもの。
    • mm/dd/yyyy
    • mm.dd.yyyy
    • mm dd yyyy
    • mm-dd-yyyy
    • ただし、これを正しく認識するためには yyyy が 1970 より大きくなければならない。
  • 6桁数字
    • 130101 ⇒ 2013/1/1 と認識。
  • 8桁数字
    • 20130101 ⇒ 2013/1/1 と認識。
    • 01012013 ⇒ 2013/1/1 と認識 (先頭4桁の数字が1970より小さい場合にこちらで認識)

なお、年が入っていない場合は日付として認識できない点に注意すること。

どうでもいいが、そもそもデータ交換用フォーマットの CSV に、年を指定しない日付を入れるような金融機関は ITリテラシー的にかなりヤバイことを自覚すべきである。CSV は Excel で読むためのフォーマットじゃないっちゅうの。