【问题标题】:how to export Core Data to CSV如何将核心数据导出到 CSV
【发布时间】:2012-05-21 06:41:25
【问题描述】:

我想使用CHCSVParser 将我的核心数据导出到 CSV。我知道如何从实体中获取所有值,但我不知道如何写入 CSV。

谁能教我如何使用CHCSVParser 写入CSV?

// Test listing all Infos from the store
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"NoteLog" inManagedObjectContext:context];
[fetchRequest setEntity:entity];

NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (NoteLog *noteInfo in fetchedObjects) {

    NSLog(@"Name: %@", noteInfo.city );
    NSLog(@"Name: %@", noteInfo.country);
    NSLog(@"Name: %@", noteInfo.datetime);
    NSLog(@"Name: %@", noteInfo.notelatitude);
    NSLog(@"Name: %@", noteInfo.notelongtitude);
    NSLog(@"Name: %@", noteInfo.state);
    NSLog(@"Name: %@", noteInfo.text);        
}  

【问题讨论】:

    标签: iphone ios xcode core-data export-to-csv


    【解决方案1】:

    CHCSVWriter 有几种构造 CSV 文件的方法:

    -writeField: 接受一个对象并将其 -description(在正确转义后)写入 CSV 文件。如有必要,它还将写入字段分隔符 (,)。您可以传递一个空字符串 (@"") 或 nil 来写入一个空字段。

    -writeFields: 接受一个以逗号分隔和以 nil 结尾的对象列表,并将每个对象发送到 -writeField:。

    -writeLine 用于终止当前的 CSV 行。如果您不调用 -writeLine,那么您的所有 CSV 字段都将位于一行。

    -writeLineOfFields: 接受一个以逗号分隔和以 nil 结尾的对象列表,将每个对象发送到 -writeField:,然后调用 -writeLine。

    -writeLineWithFields: 接受一个对象数组,将每个对象发送到 -writeField:,然后调用 -writeLine。

    -writeCommentLine: 接受一个字符串并将其作为 CSV 样式的注释写入文件。

    除了写入文件之外,CHCSVWriter 还可以初始化为直接写入NSString

    这样的东西应该适合你。

    CHCSVWriter *writer = [[CHCSVWriter alloc] initForWritingToString];
    
    for (NoteLog *noteInfo in fetchedObjects) {
    
        [writer writeLineOfFields:noteInfo.city, noteInfo.country, noteInfo.datetime, noteInfo.notelatitude, noteInfo.notelongtitude, noteInfo.state, noteInfo.text, nil];     
    }  
    
    NSLog(@"My CSV File: %@",writer.stringValue);
    

    【讨论】:

    • 嗨 Rayan,你能给我举个例子吗?我只需要导出所有数据就可以了
    • 为您的特殊情况添加了一些代码。如果你把它粘贴进去,你应该会在你的控制台中得到一个很好的 CSV 输出。从那里我相信你知道如何把它放在一个文件中,并用它做任何你想做的事情。
    • 很高兴听到 :) 编码愉快。
    • 嗨,我正在尝试您的代码,但似乎 CHCSVParser 中的“initForWritingToString”已被替换。你能帮帮我吗?我有同样的问题
    • 它不再写入字符串。现在它只直接写入路径。 initForWritingToCSVFile:(NSString *)path 所以只要给它一个你想要保存 CSV 文件的路径。如果你真的需要它在一个字符串中,你可以将它临时存储在某个地方,并使用stringWithContentsOfFile: 将其读取到一个字符串中。
    【解决方案2】:

    上面的答案似乎已被弃用,作者似乎用另一种方法替换了该方法。 这对我有用,希望对您有所帮助:

    NSOutputStream *stream = [[NSOutputStream alloc] initToMemory];
    CHCSVWriter *writer = [[CHCSVWriter alloc] initWithOutputStream:stream encoding:NSUTF8StringEncoding delimiter:','];
    
    for (Type *instance in fetchedResults) {
        [writer writeLineOfFields:@[instance.propertyA, instance.B]];
    }
    [writer closeStream];
    
    NSData *buffer = [stream propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
    NSString *output = [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding];
    

    【讨论】:

    • 什么是fetchedResults?
    • @LukeIrvin,一个数据库实体数组。见原帖——NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
    • 知道如何快速使用writeLineOfFields 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多