私はiOS開発に非常に慣れていません。コンマで区切られた約10行の単純なcsvファイルを解析しようとしています。NSScanner
以下のコードを使用していますが、フィールド (以下のコードのフィールド) を解析すると、カンマの後の次の文字列に移動しない理由がわかりません。行を実行する必要があります
[fields scanCharactersFromSet:fieldCharSet intoString:nil];
区切り文字を超えるようにします。ただし、行に対して同じことを行う必要はありませんNSScanner
。位置を改行の次の行に自動的に設定します。どちらの場合も同じ方法を使用しています - [lines scanUpToCharactersFromSet:intoString] 理解していないことがありますか?
解析しようとしているテストファイルは次のとおりです。
Name,Location,Number,Units
A,AA,4,mm
B,BB,3.5,km
C,CC,10.2,mi
D,DD,2,mm
E,EE,6,in
F,FF,2.8,m
G,GG,3.7,km
H,HH,4.3,mm
I,II,4,km
これが私のコードです:
-(void)parseFile {
NSCharacterSet *lineCharSet = [NSCharacterSet newlineCharacterSet];
NSCharacterSet *fieldCharSet = [NSCharacterSet characterSetWithCharactersInString:self.separator];
// import the file
NSStringEncoding *encoding = nil;
NSError *error = nil;
NSString *data = [[NSString alloc] initWithContentsOfURL:self.absoluteURL usedEncoding:encoding error:&error];
NSString *line,*field;
NSScanner *lines = [NSScanner scannerWithString:data];
while (![lines isAtEnd]) {
[lines scanUpToCharactersFromSet:lineCharSet intoString:&line];//automatically sets to next line - why?
NSLog(@"%@\n",line);
NSScanner *fields = [NSScanner scannerWithString:line];
while (![fields isAtEnd]) {
[fields scanUpToCharactersFromSet:fieldCharSet intoString:&field];
[fields scanCharactersFromSet:fieldCharSet intoString:nil]; //have to do this otherwise will not go to next symbol
NSLog(@"%@\n", field);
}
}
}