Подтвердить что ты не робот

Где можно найти CSV для анализатора NSArray для Objective-C?

Я ищу простой в использовании синтаксический анализатор CSV для Objective-C для использования на iPhone. Где я могу найти его?

Я также ищу другие синтаксические анализаторы, такие как JSON, поэтому, возможно, где-то есть библиотека преобразования.

4b9b3361

Ответ 1

Наконец-то я собрался, чтобы очистить парсер, который у меня был в моей кодовой папке, и разместил его на Github: http://github.com/davedelong/CHCSVParser

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

Ответ 2

Здесь простая категория в NSString для синтаксического анализа строки CSV с запятыми, встроенными внутри кавычек.

#import "NSString+CSV.h"

@implementation NSString (CSV)

- (NSArray *)componentsSeparatedByComma
{
    BOOL insideQuote = NO;
    NSMutableArray *results = [[NSMutableArray alloc] init];
    NSMutableArray *tmp = [[NSMutableArray alloc] init];

    for (NSString *s in [self componentsSeparatedByString:@","]) {
        if ([s rangeOfString:@"\""].location == NSNotFound) {
            if (insideQuote) {
                [tmp addObject:s];
            } else {
                [results addObject:s];
            }
        } else {
            if (insideQuote) {
                insideQuote = NO;
                [tmp addObject:s];
                [results addObject:[tmp componentsJoinedByString:@","]];
                tmp = nil;
                tmp = [[NSMutableArray alloc] init];
            } else {
                insideQuote = YES;
                [tmp addObject:s];
            }
        }
    }

    return results;
}

@end

Предполагается, что вы уже прочитали свой CSV файл в массиве:

myArray = [myData componentsSeparatedByString:@"\n"];

В коде не учитываются экранированные кавычки, но его можно легко расширить до.

Ответ 3

Быстрый способ сделать это:

NSString *dataStr = [NSString stringWithContentsOfFile:@"example.csv" encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [dataStr componentsSeparatedByString: @","];

Ответ 4

Хорошо, что над простыми решениями не учитываются несколько записей. Используйте следующий код, считывающий CSV по умолчанию, используя ASCI 13 в качестве маркера конца строки:

NSString *content =  [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:nil];
NSArray *contentArray = [content componentsSeparatedByString:@"\r"]; // CSV ends with ACSI 13 CR (if stored on a Mac Excel 2008)

for (NSString *item in contentArray) {
    NSArray *itemArray = [item componentsSeparatedByString:@";"];
    // log first item
    NSLog(@"%@",[itemArray objectAtIndex:0]);
}

Ответ 5

Я написал мертвый простой (хотя и не полностью признанный) CSV-парсер для проекта, над которым я работал: CSVFile.h и CSVFile.m. Не стесняйтесь его захватить - код доступен под GPLv3 (к сожалению, это было требование для проекта, над которым я работал), но я был бы рад лицензировать его вам по лицензии MIT или другой лицензии.

Ответ 6

Это кажется наиболее полным, что я нашел до сих пор.

http://www.macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data

В качестве примечания вы могли бы подумать, что большинство основных языков (Delphi, С#, Objective-c, php и т.д.) будут иметь доступную библиотеку с полной реализацией этого базового формата обмена данными.

Я знаю, что json классный, а XML надежный, но ни один из них не доступен в качестве опции сохранения из большинства приложений, сохраняющих данные таблицы. CSV все еще есть.

Ответ 7

Я нашел ParseKit несколько недель назад Но IMHO для большинства случаев -[NSString componentsSeparatedByString:] метод и NSScanner более чем достаточно и довольно прост в использовании.

Ответ 8

Как сказано выше, xmr: возможно в Objective C преобразовать элемент NSString csv в "компоненты, разделенные массивом строк".

    NSArray* items;
    items=[bufferString componentsSeparatedByString:@","];       

Если вы заинтересованы в экспорте csv, пришедшем на этот поток - как и я, - вот выдержка из того, как я экспортировал файл csv.

    NSString* fileName    = @"Level";
    fileName = [fileName stringByAppendingString:levelNumberBeingEdited];
    fileName = [fileName stringByAppendingString:@".txt"];
    NSString* [email protected]"";  

Буферная строка заполняется путем циклического прохождения каждого элемента данных (не показана) и вставки запятой между ними. Наконец, он экспортируется.

    NSString* homeDir = NSHomeDirectory();
    NSString* fullPath = [homeDir stringByAppendingPathComponent:fileName];
    NSError* error = nil;
    [bufferString writeToFile:fullPath atomically:NO encoding:NSASCIIStringEncoding error:&error];