NSStringをファイルに出力したり

 文字列を処理していると、あ〜、この処理は実行時に行うんじゃなくて、前に行った結果をデータ化したい! とか思う事がありませんか?
 いわゆるプリプロセスです。
 でも、専用のツールを作ったりするのは少々面倒だったり。
 同じアプリ内で、ファイル出力できて、それをテキストで読み込んだりできたら便利なのに、と。


 ファイル出力する方法ありました。それと、どこに出力されるかなども!

NSString *str = @"ほげほげ"; //出力したいテキストの代わり
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"testText.txt"];
[str writeToFile:dataPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"file path =(%@)",dataPath); //出力されるパスを表示


 出力されたパスの /Users/ユーザー名/Library/ を ユーザー名/ライブラリ/ に読み替えるとファインダーで楽に探せます。


 1行で出力されて扱い難い!という方は、NSMutableArrayに1行分のNSStringを次々に登録していって、
全部登録し終ったら、下のようにすると、1行にまとまってますが、区切りに"\r\n"が入って、
テキストエディタで見るとちゃんと行単位に分かれたファイルが出来上がります。

NSMutableArray* textArray = [NSMutableArray array]; //配列を空の状態で生成
// もしこの配列をずっと使いたいならretainしておく事をお忘れなく。後からreleaseする事も。
[textArray addObject:@"登録したい行"]; //こんな感じで登録
NSString* str = [textArray componentsJoinedByString:@"\r\n"]; //strにひとまとめになります。
// この後、先のファイル出力で出力


 もっとも、こんな方法は一人開発とかプログラムする人がデータ管理する場合だけかもしれませんね。
 きちんとした開発なら専用ツールを作ってデータ作成する人に渡した方がもちろん良いですね。