2010-04-10 60 views
1

我有大約2000線,看起來像一個數據源如下:對象 - 問題設置陣列componentsSeperatedByString

6712,Anaktuvuk通行證機場,Anaktuvuk通行證,美國,AKP,PAKP,68.1336,-151.743 ,2103,-9,A

我感興趣的是這個字符串的第6部分,所以我想把它變成一個數組,然後我想檢查第6部分[5] 「PAKP」

代碼:

NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *airportsPath = [bundle pathForResource:@"airports" ofType:@"dat"]; 
    NSData *data = [NSData dataWithContentsOfFile:airportsPath]; 

    NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 

NSArray *dataArray = [dataString componentsSeparatedByString:@"\n"]; 
    NSRange locationOfAirport; 
    NSString *workingString = [[NSString alloc]initWithFormat:@""]; 
    NSString *searchedAirport = [[NSString alloc]initWithFormat:@""]; 
    NSString *airportData = [[NSString alloc]initWithFormat:@""]; 

    int d; 

    for (d=0; d < [dataArray count]; d=d+1) { 
     workingString = [dataArray objectAtIndex:d]; 
      testTextBox = workingString; //works correctly 
     NSArray *workingArray = [workingString componentsSeparatedByString:@","]; 
      testTextBox2 = [workingArray objectAtIndex: 0]; //correctly displays the first section "6712" 
      testTextBox3 = [workingArray objectAtIndex:1] //throws exception index beyond bounds 
     locationOfAirport = [[workingArray objectAtIndex:5] rangeOfString:@"PAKP"]; 


    } 

問題是當workingArray填充時,它只填充單個對象(字符串的第一個組件「6712」)。如果我有它顯示workingString,它正確顯示整個字符串,但出於某種原因,它不正確使用逗號作出該數組。

我試過它沒有使用數據文件,它工作正常,所以問題來自我如何導入數據。

想法?

+1

奇怪的問題。我知道它與你的問題無關,byt,你爲什麼要爲workingString,searchingAirport和airportData分配內存? – 2010-04-10 16:33:55

+0

不是問題,但testTextBox3行在結尾處缺少分號。你確定這是正在運行的確切代碼嗎?如果你把NSLog(@「%@」,workingArray);在設置了workingArray之後,它顯示了什麼? – DyingCactus 2010-04-10 16:38:34

+0

Pablo - 一旦我解決了這個問題,這些將被用於別的東西。 仙人掌 - testTextBox3在我的文章中只是一個錯字。這是何等的記錄:2010-04-10 11:28:34.675伴侶[16752:207]( 6712, 「Anaktuvuk通行證機場」, 「Anaktuvuk通行證」, 「美國」, AKP, PAKP, 「68.1336」, 「-151.743」, 2103, 「-9」, 「」, 一個 ) – Brodie 2010-04-10 17:30:20

回答

2

您的代碼作品。你應該用調試器來運行它,看看發生了什麼。猜測,您的輸入數據不是您認爲的數據 - 可能是一種不同的編碼或不同的行結尾。

見樣本:

NSString *dataString = @"6712,Anaktuvuk Pass Airport,Anaktuvuk Pass,United States,AKP,PAKP,68.1336,-151.743,2103,-9,A"; 
NSArray *dataArray = [dataString componentsSeparatedByString:@"\n"]; 
for (NSString *workingString in dataArray) { 
    NSString *testTextBox = workingString; //works correctly 
NSArray *workingArray = [workingString componentsSeparatedByString:@","]; 
    NSString *testTextBox2 = [workingArray objectAtIndex: 0]; //correctly displays the first section "6712" 
    NSString *testTextBox3 = [workingArray objectAtIndex:1]; //throws exception index beyond bounds 
NSRange locationOfAirport = [[workingArray objectAtIndex:5] rangeOfString:@"PAKP"]; 
} 
+0

是的,我也試過。我知道問題是如何讀取數據,但我不明白爲什麼,如果我有它顯示workingString它顯示字符串,用逗號,但它不能看到他們在製作數組時。行結束是好的,因爲當我使用[dataString componentsSeparatedByString:@「\ n」];它正確地分離每一行,但逗號是什麼扔掉它。不同的編碼比你的意思是什麼? – Brodie 2010-04-10 17:08:53

+0

我只是試圖用「|」替換所有的「,」,並試圖這樣。同樣的問題。無論出於何種原因,它只能識別第一個組件。 – Brodie 2010-04-10 17:12:25

0

有在有幾個「\」 S造成的錯誤數據的問題。