※ ChatGPTを利用し、要約された質問です(原文:objectiv-cで困っています。教えてください)
外部のCSVファイルを読み込み解析する方法
このQ&Aのポイント
objectiv-cで外部のCSVファイルを読み込んで解析する方法について教えてください。
CSVファイルの中身は文章と数字がカンマで区切られています。
既に外部のテキストファイルを読み込む方法を学習済みですが、CSVファイルの読み込みについての情報が不足しています。
objectiv-cで困っています。教えてください
以前に外部のテキストファイルの中身を読み込む質問をして解答をいただき、助かりました。今回はそれを参考に外部にあるCSVファイルを読み込み解析しようとしているのですが、うまくいきません。CSVの中身は文章,数字/文章,数字/文章,数字/…となっています。いろいろ調べてみたのですが、外部のCSVファイルの読み込みについて書かれているものが分かりませんでした。どのようにしたらよいのでしょうか、教えてください。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController{
NSString* text;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self loadcsv];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//CSVの読み込み
- (void)loadcsv {
// CSVファイルの読み込み
// 送信するリクエストを生成する。
NSURL *url = [NSURL URLWithString:@"http://....................../test.csv"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
// リクエストを送信する。
// 第3引数のブロックに実行結果が渡される。
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (error) {
// エラー処理を行う。
if (error.code == -1003) {
NSLog(@"not found hostname. targetURL=%@", url);
} else if (-1019) {
NSLog(@"auth error. reason=%@", error);
} else {
NSLog(@"unknown error occurred. reason = %@", error);
}
} else {
int httpStatusCode = ((NSHTTPURLResponse *)response).statusCode;
if (httpStatusCode == 404) {
NSLog(@"404 NOT FOUND ERROR. targetURL=%@", url);
// } else if (・・・) {
// 他にも処理したいHTTPステータスがあれば書く。
} else {
text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
}
}];
// 行ごとに分割し、配列「lines」に格納
NSArray* lines = [text componentsSeparatedByString:@"\n"];
// 問題の数だけ繰り返し
for(int i=0; i<[lines count]; i++){
//問題をカンマで区切って、要素を配列「items」に格納
NSArray* items = [[lines objectAtIndex:i] componentsSeparatedByString:@","];
NSString *q = [items objectAtIndex:0];
int a = [[items objectAtIndex:1] intValue];
// 変数の中身を出力する
NSLog(@"文字列は%@", q);
NSLog(@"数字は%d", a);
}
お礼
回答ありがとうございました。「ブロック構文」や「dispatch_async」のことが分かっていませんでした。アドバイスをいただいたように調べながら勉強してます。また、よろしくお願いします。