2014-01-30 3 views
0

Objective-C를 사용하여 외부 txt 파일 (약 180kb)에서 줄을 하나씩 읽으려고합니다. 여기에 코드 조각이 있습니다. 이 코드를 이해하는 방식으로 모든 줄을 요소에 넣을 수 있습니까?for..in을 사용하여 줄 단위로 파일 읽기

내 출력 선을 인쇄하여 작동하고 있는지 제가 확인하려고하지만 아무 일도 발생하지
- (IBAction)start:(id)sender; { 
    NSString *fh = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL]; 
    for (NSArray *line in [fh componentsSeparatedByString:@"\n"]) { 
     NSLog(@"output= %@",line[5]); 
    } 
} 

, 내가 잘못 여기서 뭐하는거야?

감사합니다,

업데이트 : 내가 제안 된 변경을하고 투표율로 FH는 전무 참이다. fh에 텍스트 파일 (\ n 몇 개 포함)을 포함하는 문자열을 만들면 제대로 작동합니다. 파일 경로를 확인했지만 괜찮은 것 같습니다. 이제 문제는 어떻게 fh = nil이 될까요?

for (NSString *line in [fh componentsSeparatedByString:@"\n"]) { 
    NSLog(@"output= %@",line); 
} 

(lineNSString되고 출력 line하지 line[5] 있어야)

NSString *fh = [NSString stringWithContentsOfFile:@"file:///Users/Mubanga/Documents/Blender/rough2.txt" encoding:NSUTF8StringEncoding error:nil]; 
if([fh length] == 0) { 
    NSLog(@"fh=nil"); 
} 
for (NSString *line in [fh componentsSeparatedByString:@"\n"]) { 
    NSLog(@"output= %@",line); 
    } 

} 
+0

첫째 :

NSString *fh = [NSString stringWithContentsOfFile:@"/Users/Mubanga/Documents/Blender/rough2.txt" encoding:NSUTF8StringEncoding error:nil]; 

일반적으로 오류 매개 변수를 사용해야합니다. –

+0

@MartinR 당신이 옳았습니다. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? – Mubanga

+0

또한 NSFileHandle을 포함하지 않는 변수의 이름으로'fh'를 사용하지 않을 수도 있습니다. 문자열이 포함되어 있으므로'string','str' 또는'fileContents' 또는 그와 비슷한 이름을 지정합니다. –

답변

3

@ trojanfoe의 대답에서 필요한 변경 사항 외에도 경로가 잘못되어 fhnil입니다. stringWithContentsOfFile:은 파일 경로가 이 아닌 단순 경로를 필요로합니다. 그것은해야한다 : 그 FH가 nil이 아닌 확인, 모든

NSError *error; 
NSString *fh = [NSString stringWithContentsOfFile:@"/Users/Mubanga/Documents/Blender/rough2.txt" 
             encoding:NSUTF8StringEncoding 
              error:&error]; 
if (fh == nil) { 
    NSLog(@"Could not read file: %@", error); 
} else { 
    // ... 
} 
+1

fh가 0 일 수있는 다른 이유는 파일이 유효한 UTF-8 데이터가 아니라는 것입니다. 파일의 인코딩을 확인하십시오. –

3

루프는되어야한다.

+0

사실. 'componentsSeparatedByString :'은 배열을 반환하고,'for' 루프 *는 배열에있는 객체들을 반복합니다. 배열의 객체는 문자열입니다. 각 문자열은 원래 문자열의 행 중 하나입니다. –

1

나는 네이티브 C 호출을 사용하여 손으로 문자 입력을 할 것이다. 개행을 치기 전까지 만 read()char[] buffer에 넣은 다음 버퍼를 처리하십시오. 아니요. 코드를 작성하지 않고 여전히 관련성이 높은 K&R을 확인하십시오.

+0

동의해야합니다. 파일을 구문 분석 할 때 여전히 표준 C를 선호합니다. Objective-C는 C의 상위 집합이므로 아무 문제가 없습니다. – Freddy

+1

K & R은 모든 사용자가 영어를 사용하는 ASCII 시대에 살았습니다. 이것은 더 이상 사례가 아니며'NSString'은 일반 C보다 비 라틴 문자를 다루기 위해 더 잘 갖추어져 있습니다. – trojanfoe