Странная проблема с NSString initWithContentsOfFile

#objective-c #cocoa-touch #parsing #csv #nsstring

#objective-c #cocoa-touch #синтаксический анализ #csv #nsstring

Вопрос:

В моем пакете есть csv-файл, который мне нужно разобрать в NSArray. Проблема в том, что когда я инициализирую NSString с содержимым файла (файл находится в моем пакете), он возвращает nil. Однако, если я изменю содержимое файла на что-нибудь другое (случайное), это сработает. Возможно ли, что в файле есть какая-то строка / символ, который может мешать инициализации?

Это всего лишь простой CSV-файл с 2 столбцами, числом, запятой, некоторым текстом и » n».

Спасибо.

Ответ №1:

CSV => NSArray?

https://github.com/davedelong/CHCSVParser

* отказ от ответственности: я написал это.


Работает для меня:

 NSStringEncoding usedEncoding = 0;
NSError *csvError = nil;
NSString *raw = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://pastebin.com/raw.php?i=RXPPwpvy"] usedEncoding:amp;usedEncoding error:amp;csvError];
NSLog(@"raw: %@", raw);
NSLog(@"%@", [NSArray arrayWithContentsOfCSVString:raw encoding:usedEncoding error:amp;csvError]);
  

Комментарии:

1. Это именно то, что я пробовал, прежде чем решил разобрать это самостоятельно. Я всегда использую этот анализатор, и он работает отлично, но это первый раз, когда он не работает. Он просто возвращает nil.. Немного не по теме, но только что прочитал, что вы написали это, и я хочу поблагодарить вас за эти классы, поскольку они мне очень помогли.

2. @user635064 можешь опубликовать файл? Если анализатор не работает, я хотел бы знать, почему.

3. Привет, вот оно: pastebin.com/RXPPwpvy Просто скопируйте вставку из необработанных данных вставки внизу. Спасибо за вашу помощь.

4. Привет, спасибо за ответ. Кажется, я знаю, что происходит. Когда я экспортирую его из Excel в формат .csv, это не работает. Но, если я скопирую содержимое файла в textedit, а затем сохраню его, тогда это сработает. Вы знаете, в чем может быть проблема? Еще раз спасибо.

5. @user635064 вероятно, это проблема с кодировкой. Попробуйте открыть файл в чем-то вроде TextWrangler, чтобы посмотреть, в какой кодировке он сохраняет файл, а затем использовать эту кодировку при чтении файла.