Мне нужна помощь в разборе файла .csv на основе того, содержит ли строка заданную подстроку, и сохранение этой строки в новый файл в Objective C - PullRequest
0 голосов
/ 11 марта 2012

По сути, я ищу список продуктов. Поля, которые я использую в файле .csv: имя продукта, тип продукта, представленный числом (тип продукта: мясо, овощи, фрукты и т. Д.). Я хочу пройтись по файлу .csv построчно, и если тип пищи, скажем, фрукт (представлен номером 1), то я хочу сохранить всю эту строку в новом файле. Я хочу просмотреть ВЕСЬ список продуктов и сохранить каждый в новый файл. Как я мог сделать это в цели c? Моя идея состояла в том, чтобы найти в строке подстроку (в данном случае номер 1), и если она содержит подстроку, то я хочу сохранить всю строку в новом файле, который называется fruit. Я понимаю это в теории, но у меня возникают проблемы с пониманием, как разобрать файл .csv таким образом.

Ответы [ 3 ]

1 голос
/ 16 июля 2012

- (BOOL) readFromURL: (NSURL *) absoluteURL ofType: (NSString ) ошибка typeName: (NSError *) outError

{

NSString *fileString = [NSString stringWithContentsOfURL:absoluteURL 
                                                encoding:NSUTF8StringEncoding error:outError];

NSLog(@"------- file string ----- %@",fileString);
if ( nil == fileString )
    return NO;
 NSArray* allLinedStrings = 
[fileString componentsSeparatedByCharactersInSet:
 [NSCharacterSet newlineCharacterSet]];   
 NSLog(@"------- file string ----- %@",allLinedStrings); 

// write your code how you want display

}

1 голос
/ 12 марта 2012

NJones прав: CSV-файлы отстой, и вы не часто видите их в Objective-C, поэтому старайтесь избегать их.

Однако вы можете загрузить файл CSV со следующим кодом:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"food" ofType:@"csv"];
NSString *fileContents = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];

Если у вас есть содержимое CSV, сохраненное в памяти, либо из файла на диске, либо из веб-службы, вы можете превратить его в массив записей строк:

NSArray *lines = [fileContents componentsSeparatedByString:@"\n"];

Первая строка в CSV-файле - это, как правило, заголовок, но после его удаления (или игнорирования) просто нужно перечислить остальные строки.

for (NSString *record in lines) {
    NSArray *values = [record componentsSeparatedByString:@","];
    //values is now an array of the contents of the CSV file. Do stuff with it.
}

В этом коде много говорится о структуре файла CSV, например, о том, что в названиях продуктов нет запятых и т. Д. В общем, по возможности избегайте файлов CSV. Взгляните на сохраняющиеся данные на диске в формате JSON или, что еще лучше, в качестве хранилища базовых данных.

0 голосов
/ 12 марта 2012

Если ваш CSV-файл довольно прост с четко определенным форматом, вам может повезти с собственным кодом, основанным на предложении @Ash Furrow.

Если вы столкнулись с более сложным импортом, вам может пригодиться учебник и класс синтаксического анализа CSV, созданный Мэттом Галлахером.Он проделал отличную работу, создав хороший способ работы с CSV-файлами.Вы можете проверить это здесь: http://cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.htmlhttp://cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.html

...