[iPhoneアプリ開発] CSVファイルデータ取得


最近初めたiPhoneアプリ開発。
CSVからデータを取得する必要があったので試してみる。
下記、sections.csvファイルからデータを取得してログにだした場合の例。

sections.csv

1,サル
2,ゴリラ
3,ゾウ
4,キリン

サンプルプログラム

	// CSVファイルからセクションデータを取得する
	NSString *csvFile = [[NSBundle mainBundle] pathForResource:@"sections" ofType:@"csv"];
	NSData *csvData = [NSData dataWithContentsOfFile:csvFile];
	NSString *csv = [[[NSString alloc] initWithData:csvData encoding:NSUTF8StringEncoding] autorelease];
	NSScanner *scanner = [NSScanner scannerWithString:csv];
	
	// 改行文字の集合を取得
	NSCharacterSet *chSet = [NSCharacterSet newlineCharacterSet];
	// 一行ずつの読み込み
	NSString *line;
	NSMutableArray sections = [[NSMutableArray alloc] init];
	while (![scanner isAtEnd]) {
		// 一行読み込み
		[scanner scanUpToCharactersFromSet:chSet intoString:&line];
		NSLog(@"line = %@", line);
		// カンマ「,」で区切る
		NSArray *array = [line componentsSeparatedByString:@","];
		// 配列に挿入する
		[sections addObject:array];
		// 改行文字をスキップ
		[scanner scanCharactersFromSet:chSet intoString:NULL];
	}
	NSLog(@"sections = %@", [sections description]);

NSLog結果

line = 1,サル
line = 2,ゴリラ
line = 3,ゾウ
line = 4,キリン
sections = (
(
1,
“\U30b5\U30eb”
),
(
2,
“\U30b4\U30ea\U30e9”
),
(
3,
“\U30be\U30a6”
),
(
4,
“\U30ad\U30ea\U30f3”
)
)

※最後の[sections desction]のログが日本語の表示はおかしいが実際アプリ上では正しく日本語で表示されます。