2011-09-20 3 views
2

수십억 개의 문자가 포함 된 텍스트 파일을 읽으려고합니다. 함수를 사용하면 contentOfFile이 작동하지 않습니다. 내 응용 프로그램으로 인해 응용 프로그램이 손상 될 수 있습니다.거대한 텍스트 파일에서 텍스트 덩어리를 읽는 방법?

아무도 내 요구 사항에 따라 청크를받을 수 있도록 샘플 코드를 보내주십시오. 원하는 것은 내가 원하는 것뿐입니다. 가능한 빨리 회신 해주십시오.

답변

13

저는 이것이 iOS 앱이라고 생각합니다. 이 경우 해당 메서드가 파일의 전체 내용을 변수 (메모리)로 읽으려고하므로 contentsOfFile:을 호출하여 메모리 제한을 초과 할 가능성이 큽니다. iOS에서는 앱이 훌륭하게 작동해야하며 너무 많은 메모리를 사용하기로 결정하면 워치 독 프로세스가 앱을 종료하여 기기를 다시 부팅하지 않도록합니다 (iOS 기기에서 스왑 할 디스크가 없기 때문에 발생합니다).

NSFileHandle을 보셨습니까? NSFileHandle은 텍스트 내에서 파일 찾기를 지원합니다. 간단한 반복하면 데이터의 덩어리를 파일 내에서 추구하고 읽는 방법에 다음을 사용할 수 있습니다

- (NSData *)readDataOfLength:(NSUInteger)length; 
- (void)seekToFileOffset:(unsigned long long)offset; 

그것은 다음과 같이 보일 수 있습니다. . pathToFile 텍스트 파일의 경로를 포함하는 NSString 가정의 응답을

uint64 offset = 0; 
uint32 chunkSize = 1024;  //Read 1KB chunks. 
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:pathToFile]; 
NSData *data = [handle readDataOfLength:chunkSize]; 

while ([data length] > 0) 
{ 
    //Make sure for the next line you choose the appropriate string encoding. 
    NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 

    /* PERFORM STRING PROCESSING HERE */ 

    /* END STRING PROCESSING */ 
    offset += [data length]; 

    [handle seekToFileOffset:offset]; 
    data = [handle readDataOfLength:chunkSize]; 
} 

[handle closeFile]; 
+0

감사를 읽을 수 있지만 난 = 0 오프셋 UINT64'의 가치를 높일 때 당신은 무엇을 알고하는 단계;' '0'에서에 어떤 상위 정수 ie 10, 그 다음 영어 편지가 아닌 이상한 수정 자에서 응답합니다 – rptwsthi

+0

이 질문을 확인하십시오, 여기에 먼저 st2 = 원하는 응답입니다, 그 후에 '0에서 100으로'의 오프셋을 변경했습니다 – rptwsthi

+0

http://stackoverflow.com/questions/7487761/problem-in-reading-from-file-recursively – rptwsthi

1

좋은 생각은 이전에 방대한 파일을 열었 기 때문에 textedit 소스를 살펴 보는 것이 좋습니다. 그리고 방법이 있어야합니다. 왜 앱이 충돌하는지 잘 모르겠다. 문제가 없어야합니다.

관련 문제