PCアプリの保存形式をどうする? CSVしか思いつかない人は退場

パソコン用のアプリケーションを作るとき、データを保存するためのファイル形式は柔軟性を考慮して考えておく。XMLかJSONの精神を身につけるべし。

初めてのCの体験が忘れられない人たち

自分でプログラムを書ける人のなかに、データをCSV形式で保存する人がいます。

別に悪いことではありません。テキストファイルを1行ずつ書きだすだけの簡単なプログラムになるので、チャチャっとプログラムを書くなら、そして書式の制約を理解している自分だけが使うのなら、素早くプログラムを書くことができます。

そのため、50歳を超えるノンプロ社内プログラマには、「そこで使うと後々面倒だよぉぉぉ」というところにもCSVを使ってしまう人がいます。そして、呪文のように、”fprintf, fscanf, fgets”を唱えるのです。

しかし、CSV形式はデータの並びが重要で、データ項目を追加しようとすると、プログラムを変更しなくてはなりません。これからプログラムを書く人は、内部構造を持つことができ、データ項目の追加・更新に柔軟な、XMLやJSONを使えるようになっておきましょう。

CSV vs XML, JSON

CSVもXMLもテキストファイルです。メモ帳などのエディタで開いて、読むことができるファイル形式です。

CSVはデータの値を、カンマで区切って並べるだけの形式です。たとえば、

佐藤,21,5
清水,20,15
鈴木,23,4

みたいな感じです。それが何を表しているかは、あらかじめ決めておくわけです。上の例でいえば、バイトの名前と年齢と経験月数、とかね。

もし、電話番号を追加しよう、年齢じゃなく誕生年に変更しようとなれば、データの並びを変えなくてはなりませんから、プログラムも変えなくてはいけないし、データとプログラムはセットですから、プログラムのバージョン管理もしなくてはなりません。プログラムをすでに配布していたりしたら、大変ですよ。

その点、XMLやJSONはデータ項目の追加、変更にはビクともしません。

いや、少しはしますが、データ構造を変更したことで、プログラムを修正する必要性は大幅に低減します。XMLで同じデータを表すと、たとえば、つぎのようになります。ここでは、データ部分だけを示しています。

<person>
<name>佐藤</name>
<age>21</age>
<experience>5</experience>
</person>
<person>
<name>清水</name>
<age>20</age>
<experience>15</experience>
</person>
<person>
<name>鈴木</name>
<age>23</age>
<experience>4</experience>
</person>

おなじものを、JSON形式で記述すると、つぎのようになります。

person={name=”佐藤”, age=21, experience=5}
person={name=”清水”, age=20, experience=15}
person={name=”鈴木”, age=23, experience=4}

いずれも一瞥してデータの意味が分かりますね。

しかも、データの追加は簡単です。

<person>
<name>佐藤</name>
<phone>03-9999-8888</phone>
<age>21</age>
<experience>5</experience>
</person>

person={name=”佐藤”, phone=”03-9999-8888″, age=21, experience=5}

このように値を追加しても、もとのプログラムはそのまま動きます。もちろん、追加したデータを利用するなら、読み込む機能をつけなくてはいけませんが、データの表記が変わっただけでは、元のプログラムは影響を受けません。

いろんなプログラミング言語に便利なライブラリがあります

しかし、こんなゴチャゴチャした文字列を読み込んで、データを切り分けて、数値に変換して。。。

なんてことを考えたらメリットは半減します。

そこで、便利なライブラリを利用しましょう。

XMLにしても、JSONにしても、その書式で書かれた文字列をそっくりそのまま入力すれば、食べやすいように料理してくれるフリーのプログラム(ライブラリ)があります。

つまり、

document = XMLSERVER.read(str);

みないな感じで、XML文字列を保存してあるstrを、ライブラリに放り込んでやれば、

name = document.get(“name”)

みたいな感じで、データを取り出せるのです。XMLSERVERの部分とか関数名とかは、適当に書いています。ライブラリによって使い方は違いますから、使うライブラリのマニュアルを読んでください。

いちおう言い訳をしておくと、実際には、何番目のpersonデータについて、nameを取り出すのかとか、ループ処理で順番に処理するとか、細かいプログラムを書くことになります。

ですから、せっかくXMLを使っていながら、文字列を直接操作してはいけません。

「fgetsで読み込んで、前から読んでいって、</ホニャララ>を見つけたら、そこまでのデータをstrncpyして、atofでぇ。。。」

ピー!退場!

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする