私はiOS開発の新機能です。私はカンマで区切られた約10行の単純なCSVファイルを解析しようとしています。私は以下のコードを使用していますが、なぜNSScanner
フィールドを解析すると(下のコードのフィールド)、カンマの後の次の文字列に移動しないのか理解できません。私は、区切り文字を越えるように行を実行する必要があります。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);
}
}
}
ロブ、お返事ありがとうございます。しかし、私はライン上でこれを使うと、スキャン位置を次のラインに自動的に増やすのはなぜですか? – RXP
私は自分の答えを編集しました。 –
ロブ、お返事ありがとうございます。 NSScannerのデフォルトの動作は、改行と空白をスキップすることです。私はこの部分を見逃した。 -rp – RXP