2014-07-08 7 views
1

나는 파일을 읽을 수있는이 라인을 가지고 배열의 항목으로 그 라인을 분할 :읽기 파일

- (NSArray *)lerLinhasArquivoBundle:(NSString *)nomeArquivo { 

    NSString *arquivo = nil; 
    NSError *error = nil; 

    NSString *bd = [[NSBundle mainBundle] pathForResource:nomeArquivo ofType:@"csv"]; 

    if (bd) { 
     arquivo = [NSString stringWithContentsOfFile:bd 
              encoding:NSUTF8StringEncoding 
               error:&error]; 
    } 

    if (error || !bd) { 
     return nil; 
    } 

    return [arquivo componentsSeparatedByString: @"\r\n"]; 
} 

문제는이 파일 만 작동한다는 것입니다 "windows"CR/LF 엔딩이 있고 UNIX 라인 엔딩이있는 파일에는 실패합니다. 파일이 유닉스 파일 일 때 배열에 하나의 큰 항목 만 있습니다.

좋아요, 나는 \r\n을 테스트하고 단지 \n을 테스트하는 방법을 해킹 할 수 있으며 배열에 더 많은 항목을 제공하는 방법을 사용합니다. 그러나 이는 절름발이 솔루션으로 보입니다.

을 알고 있습니까? 어떤 라인 엔딩이 사용되고 있으며, 그 정보를 리턴 라인에서 사용하여 요소를 배열로 분할합니까?

+0

은 무엇'[componentsSeparatedByCharactersInSet는 arquivo : NSCharacterSet는 newlineCharacterSet] 반환하지]'합니까? – trojanfoe

+0

아하 !!! 그게 다야. 이 칭찬을 답으로 추가하십시오! 감사합니다 – SpaceDog

답변

3

사용 [NSCharacterSet newlineCharacterSet]보다는 명시 적 문자열 :

return [arquivo componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
+1

P E R F E C T! ! ! 감사 – SpaceDog