【问题标题】:Best way to approach loading a class from a comma delimited file从逗号分隔文件加载类的最佳方法
【发布时间】:2010-12-14 03:22:09
【问题描述】:

我对 Objective-c 和一般的面向对象编程来说是一个相当新的人,并且有一个理论、文体类型的问题。我想要做的是从逗号分隔的文件中加载一个包含条目的类表。文件中的数据由许多条目组成,这些条目由一个短键和几个字符串值组成,全部由逗号分隔。

有一百万种方法可以做到这一点,但我想问的是,从严格的理论角度来看,最好的方法是什么。我暂时不想使用任何类型的 XML 编码,但一旦我有了一个入门程序,最终可能会转换为那种格式。

我可以使用函数来获取“下一条记录”并将结构传入和传出函数,创建类的新实例,从结构中加载它,然后将其添加到数组中。我最初会使用 stringWithContentsOfFile 方法将文件加载到字符串中,然后使用字符串函数和一些指针来遍历文件以返回结构元素,然后将其加载到类中。

这似乎是在 Objective-c 中执行此操作的合理方法,还是有更好的方法,可能在理论上更合理,至少也可以?

【问题讨论】:

    标签: objective-c coding-style classloader csv


    【解决方案1】:

    您有一个 CSV 文件,并且想要阅读它? There's some code for that.

    最简单的方法是这样的:

    #import "CHCSV.h"
    
    NSString * csvFile = ...; //path to the CSV file
    NSError * error = nil;
    NSArray * contents = [NSArray arrayWithContentsOfCSVFile:csvFile
                                                    encoding:NSUTF8StringEncoding
                                                       error:&error];
    if (contents == nil) {
        NSLog (@"Error %@", error);
    } else {
        for (NSArray * row in contents) {
            NSLog(@"CSV fields in this line: %@", row);
            // "row" contains all the fields (as NSStrings) that were present
            // on this line of CSV
        }
    }
    

    【讨论】:

    • 那是一段不错的代码。对于旧的 COBOLer 来说有点紧凑,但相当不错。我考虑过围绕输入文件构建一个“类”并使用“方法”来提取我需要的内容。将其加载到 NSSTRING 的一种方法...将下一行提取到另一个字符串中的另一种方法...另一种获取当前行中的第一个值的方法...等等...这是否有点矫枉过正?
    • @Joe 这取决于您对代码的目标是什么。在编写CHCSVParser 时,我的目标是使其尽可能简单易用,因此除了事件驱动解析选项(有关其工作原理的信息,请参阅项目)之外,我还添加了这些内容以使其成为单线电话。
    • 谢谢。我可能会尝试两种方式(一种使用您提供的代码),另一种可能更正式的版本只是为了看看优点/缺点。
    • @Yar 约定是因为NSError** 是可选的,所以它只是描述返回值指示失败时发生的情况的元数据。在检查错误之前,您应该始终检查返回值,因为不能保证错误与最初设置的值相同。
    • @Yar 在错误处理编程指南中记录错误对象之前检查返回值:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2021-04-26
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多