スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


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

CSVファイルの読み込み

設定やデータを外部ファイルから読み込んで利用する場合、一般的にはXMLファイルやplistファイルを使用する。
しかし、昔ながらのCSVファイルが結構扱いやすかったりする。
CSVファイルの読み込みについて解説したサイトが案外少ないのであえて挑戦!(あまり使わないか・・・)

今回は、Resourcesグループに登録されたtest.csvを読み込むことにする。
まずはファイルの読み込み部分。以下のコードでファイルを開いて、読み込んだ内容をNSData型に保存する。

// 読み込みファイルのフルパス生成
NSString *strSubjectPath = nil;
strSubjectPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"csv"];

// ファイルハンドルを開く
NSFileHandle *hFileHandle = [NSFileHandle fileHandleForReadingAtPath:strSubjectPath];

// ファイルハンドルからの読み込み
NSData *datFile =[hFileHandle readDataToEndOfFile];


続いて、NSDateクラスをNSStringクラスに変換。これで全データを文字列として格納する。なお、データ量が大きい場合は1行ずつ読み込むような作りにすべきだと思う。(今回はパス)

// NSData->NSString
NSString *strFileAll = [[[NSString alloc] initWithData:datFile encoding:NSUTF8StringEncoding] autorelease];


不要になったファイルハンドルは閉じておく。

// ファイルを閉じる
[hFileHandle closeFile];


文字列は改行単位で処理していくので、改行~改行までをNSRangeクラスで範囲指定し、その中身を解析していく。
1行の文字列をカンマ区切りで分割するためには、NSString:componentsSeparatedByStringを使う。このメソッドの戻り値は配列(NSArrayクラス)となっており、区切り文字で区切られた各文字列が配列の各要素に格納される。
取得した値をログ出力するまでのサンプルソースは以下。


// 配列の数を定義
NSInteger iFileAllLength = [strFileAll length];
NSRange parseRange = NSMakeRange(0, iFileAllLength); // 解析範囲

// ファイルの文字列を1行ずつ処理
while (parseRange.location < iFileAllLength){

    // 1行の範囲を取得
    parseRange = [strFileAll lineRangeForRange:NSMakeRange(parseRange.location, 0)];

    // 終端の改行コード以外の文字列を取得
    NSRange cpyRange;
    cpyRange.location = parseRange.location;
    cpyRange.length = parseRange.length - 1;
    NSString *strLine = [strFileAll substringWithRange:cpyRange];

    // 文字列をカンマで区切って配列に格納
    NSArray *aryColumn = [strLine componentsSeparatedByString:@","];

    // 2カラム未満の場合は対象外
    if (2 <= [aryColumn count]) {
        NSLog(@"%@,%@", [aryColumn objectAtIndex:0], [aryColumn objectAtIndex:1]);
    }

    // 解析範囲を次に進める
    parseRange.location = NSMaxRange(parseRange);

} // while (parseRange.location...


※CSVファイルのカラム数が2の場合のサンプルプログラムです。

単純なデータ構造で、わざわざXMLファイルを使うまでもない場合、かつ、ソースにベタ書きは避けたい時なんかに利用できると思います。


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

テーマ : プログラミング
ジャンル : コンピュータ

コメント

非公開コメント

No title

貴重な記事をありがとうございます。
parseRange.location = NSMaxRange(parseRange);
をwhileの最後に入れないと無限ループになるかもしれないです。

No title

ご指摘ありがとう御座います!!確かに、これでは無限ループしてしまいますね・・・。記事を修正しましたのでよろしくお願いします。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: CSVファイルの書き込みは?

コメントありがとう御座います。
CSVの書き込みの場合、単純にカンマ区切りのテキストを作成してファイル出力すれば良いと思います。

// カンマ区切りの文字列を作成(実際は行と列をループさせて文字列を作成)
NSString* text = @"aaa,bbb\nccc,ddd\neee,fff";

// ドキュメントフォルダにファイル出力
NSError* error;
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
if([paths count] > 0){
NSString* dirPath = [paths objectAtIndex:0];
NSString* path = [dirPath stringByAppendingPathComponent:@"test.csv"];
BOOL result = [text writeToFile:path atomically:yes encoding:NSUTF8StringEncoding error:&error];
}
※動作確認はしていないため、そのままでは動作しない可能性があります。
iPhoneアプリ紹介
パズルナビ for パズドラ 2016
最強のコンボツール!
colorization-large-icon.png

スクリーンショットを読み込むとコンボを自動計算してくれるパズドラの攻略アプリです。


AirRuler
(簡易距離計)

リモートで簡単に距離を測定できるアプリ!
colorization-large-icon.png

目標地点に向けてiPhoneを傾けるだけで簡単に距離を測定できます。ゴルフの距離測定機能付きパターの代わりにも使えます。


補色残像アート
~見えない色が見えてくる~
白黒なのにカラーに見えてしまう不思議な映像を体験しよう!
colorization-large-icon.png

補色残像という目の錯覚を利用して、白黒写真がカラーに見える不思議な映像を作成できます。作成した映像は、アニメGIFに変換したり、Twitterに投稿することもできます。


タイピング革命
フリック練習はタイピング革命で!ネットランキングで盛り上がろう!
icon-l-typing.jpg

オンラインランキング上のプレイを閲覧できるリプレイ機能付き!フリック入力とローマ字入力に完全対応したタイピング練習アプリです。初心者も安心のトレーニングモード付き。

★なんと!あのAppBank様に紹介して頂きました!!
typing-sale-led.gif


簡単3Dカメラ
iPhoneで手軽に3D写真を楽しもう!平行法/交差法/アナグリフ/グラグラ3Dに対応。
icon-l-3d.jpg

2枚の写真を撮影するだけで、裸眼で立体視できる3D写真が作成できます。85円でステレオ写真もアナグリフも楽しめるのは簡単3Dカメラだけ!

プロフィール

あらきんぐ☆

Author:あらきんぐ☆
はじめまして。あらきんぐです。
4月からiPhoneを購入し、その魅力に取り付かれて、気がついたらアプリ開発の道へ!仕事でプログラム開発をしていますが、基本「動けばOK!」な適当エンジニアです。適当でもアプリは作れる!っていう事を、ブログを通じて証明していきたと思います。

最新記事
最新コメント
最新トラックバック
カテゴリ
FC2カウンター
全記事表示リンク

全ての記事を表示する

Twitter
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
アクセスランキング
[ジャンルランキング]
コンピュータ
385位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
51位
アクセスランキングを見る>>
オススメ商品
iPhone/iPodと一般オーディオを繋ぐ貴重なアイテム!
アプライドオリジナルアイテム MBB...

アプライドオリジナルアイテム MBB...
価格:3,980円(税込、送料別)

開発中級者にオススメ!「こんなことができるんだ!」と驚かされる一冊
【送料無料】iPhone...

【送料無料】iPhone...
価格:1,500円(税込、送料別)

安い!シンプル!カッコいい!
希少なiPhone対応キーボード内蔵ケース
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。