Почему все остальные объекты в моем массиве пустые? - PullRequest
7 голосов
/ 25 декабря 2011

Я читаю файл CSV в массив, используя:

NSString *theWholeTable = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"csv"]
                                                    encoding:NSUTF8StringEncoding 
                                                       error:NULL];
NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];

И каждый второй объект в массиве пуст, есть идеи, почему?

Данные файла CSV выглядят так:10,156,326,614,1261,1890,3639,5800,10253,20914 20,107,224,422,867,1299,2501,3986,7047,14374

, где 10 и 20 - начало каждой новой строки.

спасибоаванс.

Редактировать Я попытался использовать следующий код:

NSArray *tableRows = [theWholeTable componentsSeparatedByString:@"\n"];

И это сработало так, как я этого хотел.

Хотя я до сих пор не уверен, почему newlineCharacterSet создал пустые объекты ...

Ответы [ 2 ]

9 голосов
/ 25 декабря 2011

Если ваш CSV файл поступил из не-UNIX системы, он может содержать несколько разделителей строк (например, \r\n вместо \n).В этом случае componentsSeparatedByCharactersInSet вставит пустые строки для пустых последовательностей символов между \r и \n.

Вы можете удалить пустые строки из NSArray, используя этот метод:

tableRows = [tableRows filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
1 голос
/ 24 мая 2012

Для решения этой проблемы я использовал другой способ:

NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet  characterSetWithCharactersInString:@"\n"]]

Так что вам не нужно удалять строки.

...