저는 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
여기 내 코드입니다 : 다만 방법을 NSScanner
작품이다
-(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
나는 나의 대답을 편집했다. –
Rob, 답장을 보내 주셔서 감사합니다. NSScanner의 기본 동작은 줄 바꿈과 공백을 건너 뛰는 것입니다. 나는이 부분을 놓쳤다. - rp – RXP