たまたんのぶろぐ

たまたんが時たま言いたいことを書いてます。ジャンルはめっちゃええ加減ですwソフトやプログラムのことが多いかもしれませんが。。。。。

Objective-CでCSVをプロパティリストに変換する方法

珍しく2日連続で投稿w

 

昨日、Cocoa勉強会関西ビギナーズに参加してきました。

おまえビギナーだったんかいって突っ込まれそうですが、いつも心は初心者です。( ー`дー´)キリッ

それは冗談で、難しいことは教えられないですが、

初心者の方に教える力はありますので、参加させていただいております。(⌒〜⌒)ニンマリ

それで、その時に、CSVXMLからplist(プロパティリスト)に変換する方法はないかと聞かれました。

 

そもそも、plistは、XML形式になっていています。

Appleが設定しているDTDにしたがって作られています。

詳しくは、

Property List Programming Guide: Introduction to Property Lists

を参照してください。英語だけどね。。。

plistには、形式がいろいろありまして、

配列型、辞書型、文字列型、データ型、日付型、整数型、浮動小数点数型、ブーリアン型(YES/NO)があります。

今回は、配列と辞書型を変換するようにしてみます。

 

また、CSVは、カンマ区切りでやってみます。(ダブルコート「"」を使用したものとそうでないものとを扱います。)

 

ちなみに、Objective-C(NSObject)には、plistへシリアライズ化するものがあるので、簡単に変換できるようになっています。(参照

 

それを使ってプログラムを書いてみます。

小さいプログラムを作るので、ちょっと冗長なところはあるかもしれませんが、

勘弁してくらはい。<m(__)m>

ソースは、自由に使ってかまいませんが、

出来れば、Webサイトの紹介をしていただければありがたいです。<(_ _)>

 

まずは、単なるカンマ区切りのCSVを変化するプログラム

単に、1行ずつ読み込んで

行を「,」で分割して順番に辞書にほりこんでいきます。

そしてそれを配列に突っ込んで、後はシリアライズ化!!

どう?かんたんでしょ?

でもこれだと、カンマが入った文章中にのCSVだと、少々難しくなるので、

正規表現でカンマの位置を取得して、

順番にカンマ位置までのワードを取り出していき、「"」がついていたらトリムするようにしてます。

 こんな感じですね。

後者のテストデータと実行後の出力データをのしておきます。

test.csv

-----------------------------------

test1,test2,test3,test4,test5

あ,い,う,え,お

か,き,く,け,こ

"さ","し","す","せ,","そ"

た,ち,つ,て,と

-----------------------------------

test.plist

f:id:tama-jp:20140223103247p:plain

 

ちょいと、後者は難しかったかもしれないなぁ。。。。