2013-01-26 3 views
-1

막혔습니다! 나는 이것을 작동시킬 수 없다.NSArray에 파일의 데이터를 채 웁니다.

이것은 다음과 같습니다. 저는 결국 NSArray를 채우려는 .txt 파일의 일부 데이터를 가지고 있습니다! 이 내가 무슨 짓을했는지 있습니다 :

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"intsAndsStrings" ofType:@"txt"]; 
NSArray *objectsArray = [[NSArray alloc]initWithContentsOfFile:urlString]; 
NSLog(@"objectsArray is: %@", objectsArray); 

내가 마지막 줄에서 얻을 수있는 유일한 출력;

objectsArray is: (null) 

txtFile의 개체는 쉼표 (,)로 구분됩니다.

도와주세요!

+0

질문은 실제로 CSV 파일을 배열로로드하는 방법입니다. 난 당신이 CSV 파일을 구문 분석에 대한 몇 가지 검색을 제안합니다. 파일의 데이터에 따라 처음에는 훨씬 더 많은 작업이 있습니다. 쉼표 또는 개행 문자가 포함 된 값을 처리해야 할 수 있습니다. – rmaddy

답변

1

사용중인 확장 프로그램에서 볼 수 있듯이, 아마 plist 파일이 아닙니다.

당신은이 같은 PLIST의 배열을 포함 파일, 뭔가 사용해야합니다 initWithContentsOfFile:을 사용하기 위해서는

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<array> 
    <string>hello</string> 
</array> 
</plist> 
+0

John에는 plist 파일이 없습니다. 그는 CSV 파일을 가지고 있습니다. 그렇다면 그는 무엇을해야만할까요? – trudyscousin

2

를, 당신의 파일은 속성 목록 형식이 아닌 쉼표로 구분 된 형식이어야한다. Property List Programming Guide를 확인하십시오.

+0

John에는 plist 파일이 없습니다. 그는 CSV 파일을 가지고 있습니다. 그렇다면 그는 무엇을해야만할까요? – trudyscousin

+0

CHCSV Parser와 같은 라이브러리를 사용해야합니다 ... https://github.com/davedelong/CHCSVParser – iluvcapra

5

게시 한 코드는 파일이 루트 요소 인 array 인 plist 유형 파일이어야합니다. txt 파일이 평범한 오래된 텍스트 파일이고 각 텍스트 줄을 배열에 넣으려면 완전히 다른 접근 방식이 필요합니다.

하나의 옵션은 NSString 변수에 텍스트 파일을로드 한 다음 newlineCharacterSet을 전달하는 componentsSeparatedByCharactersInSet:을 사용하여 문자열을 문자열로 분할하는 것입니다.

NSString *urlString = [[NSBundle mainBundle] pathForResource:@"intsAndsStrings" ofType:@"txt"]; 
NSString *rawText = [NSString stringWithContentsOfFile:urlString encoding:NSUTF8StringEncoding error:nil]; 
NSArray *objectsArray = [rawText componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

실제 코드는 오류를 올바르게 처리합니다.

편집 : 방금 텍스트 파일이 CSV 파일임을 알게되었습니다. 이것은 약간 더 많은 처리를 필요로합니다. CSV 파일에 두 줄 이상이 있습니까? 각 라인의 각 값을 어떻게 저장해야합니까?

+0

안녕하세요, 백만 분입니다! 당신이 정말로 나를 도왔습니다. 또 다른 문제가 있습니다 : 1, @ "one", 2, @ "two", 3, @ "four", 5, @ "five", 6, @ "six", 7, @ "7", 8, @ "8", 9, @ "9", 10, @ "ten", nil int를 검색하지만 문자열을 사용합니다. –

+0

왜 텍스트 값이 NSString 리터럴처럼 보이게 설정 되었습니까? CSV 파일에'@'기호 나 따옴표를 사용하면 안됩니다.값에 쉼표가 포함되어있는 경우에만 값을 따옴표로 묶어야합니다. 또한 텍스트 파일의 줄 끝 부분에'nil '을 두는 이유는 무엇입니까? – rmaddy

+0

그리고 그것은 배열 int와 문자열을 들고 적합하지 솔기. 어떻게해야합니까? –

1

CHCSVParser을 사용하십시오. 파일에 대한 경로를 지정하면 NSString 전체를 돌려 줄 것입니다.

NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"]; 

NSError *error = nil; 
NSArray *rows = [NSArray arrayWithContentsOfCSVFile:path encoding:NSUTF8StringEncoding error:&error]; 
if (rows == nil) { 
    //something went wrong; log the error and exit 
    NSLog(@"error parsing file: %@", error); 
    return; 
} 

이 시점에서 행은 배열입니다. 행의 각 요소는 그 자체로 CSV 파일의 단일 행을 나타내는 배열입니다. 그리고 그 배열의 각 요소는 NSString입니다.

관련 문제