読者です 読者をやめる 読者になる 読者になる

ニペブ - iPhone / iOSアプリ開発

iPhone / iOS アプリ開発方法と技術情報、入門レベルの初心者向けの記事を書いています。

(iOS/iPhoneアプリ開発) CSVファイルをパースする

完成イメージ

iPhoneのアプリ開発でCSVファイルをパースするライブラリがあったのでメモします。
区切り文字をカンマ(,)以外に変えることもできますし、ダブルクォーテーションに囲まれて文字列("A,B")などにも対応しています。

導入方法

  1. http://projectswithlove.com/projects/CSVImporter.zip からダウンロードする。
  2. DLしたファイルを解凍し、CSVParser.hCSVPaser.m を自分のプロジェクトにコピーする。


自分のプロジェクトがARCが無効の場合、ARCを無効にする。

  1. ビルド設定の、Build Phaseタブの、Compile Sources 設定を開きます
  2. CSVPaser.mコンパイルオプションに -fno-objc-arc を入力します

使い方

コメントとソースコードを見ながらイメージを掴んでください。

// CSVファイルのパスを取得
NSString *filePath = [homeDir stringByAppendingPathComponent:@"(CSVファイル名).csv"];

// UTF8 エンコードに変換した文字列に変換
// (ファイル内容イメージ)
// id, name
// 1, Oops!
// 2, "well, well, well"
// ....
NSString *text = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

// Parserを作成する
// 区切り文字を","に設定、ヘッダーは存在する
CSVParser *parser = [[CSVParser alloc] initWithString:text separator:@"," hasHeader:YES fieldNames:nil];

// CSVファイルにパースする
// 各列を配列にし、各列の内容はNSDictonary型で格納されている
NSArray *lines = [parser arrayOfParsedRows];

// 各列を処理する
NSDictionary *row = nil;
for (int i = 0; i < [lines count]; i++) {

    // 列のNSDictonary型を取得
    category = lines[i];
    
    // 値の取得
    NSInteger id = [[category objectForKey:@"id"] integerValue]];
    NSString *name = [row objectForKey:@"name"];
}