【问题标题】:Basics Introduction To Using CHCSVParser使用 CHCSVParser 的基本介绍
【发布时间】:2011-10-21 03:23:00
【问题描述】:

我正在我的 iPhone 应用程序中实现 CHCSVParser(感谢 Dave!)但是我真的很困惑如何使用它。我已阅读自述文件并搜索了一些关于 SO 的问题,但仍不能 100% 确定该怎么做。

我有一个 .CSV 文件,其中可能包含 5000 行数据和 3-4 列。

我希望这些数据作为回报,加载我的 UITableView 及其对应的 detailViewController。

所以我假设我需要以某种方式实现 API 的数组方法,但任何人都可以帮助我开始吗?

【问题讨论】:

    标签: iphone objective-c xcode parsing csv


    【解决方案1】:

    很高兴你喜欢它:)

    基本上,CHCSVParser解析 CSV 文件。你给它一个 CSV 文件的路径,它会给你一大堆NSStrings。在那之后你做什么完全取决于你。

    假设您在 iOS 应用中包含了一个名为“Data.csv”的 CSV 文件。下面是你如何使用CHCSVParser 来解析它:

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"csv"];
    
    NSError *error = nil;
    NSArray *rows = [NSArray arrayWithContentsOfCSVFile:path encoding:NSUTF8StringEncoding error:&error];
    if (rows == nil) {
      //something went wrong; log the error and exit
      NSLog(@"error parsing file: %@", error);
      return;
    }
    

    此时,rows 是一个数组。 rows 中的每个元素本身就是一个数组,表示 CSV 文件中的一行。 that 数组的每个元素都是一个NSString

    假设您的 CSV 文件如下所示:

    Barringer,Arizona,United States,Earth
    "Chicxulub, Extinction Event Crater",,Mexico,Earth
    Tycho,,,Moon
    Lonar,Maharashtra,India,Earth
    

    如果你通过解析器运行它,你会得到等价的结果:

    [NSArray arrayWithObjects:
     [NSArray arrayWithObjects:@"Barringer",@"Arizona",@"United States",@"Earth",nil],
     [NSArray arrayWithObjects:@"Chicxulub, Extinction Event Crater",@"",@"Mexico",@"Earth",nil],
     [NSArray arrayWithObjects:@"Tycho",@"",@"",@"Moon",nil],
     [NSArray arrayWithObjects:@"Lonar",@"Maharashtra",@"India",@"Earth",nil],
     nil];
    

    然后你用它做什么是你的事。 CSV 解析器对 UITableView 一无所知,因此您可以获取这些数据并以您可以轻松处理并适合您的数据模型的方式对其进行重组。

    另外,请记住,使用CHCSVParser,即表示您同意遵守the terms under which it is made available。 :)

    【讨论】:

    • 谢谢,戴夫,这很有帮助!那么在我的表 VC 的viewDidLoad 方法中实现此方法的最佳位置在哪里?并且 API 会自动知道,当两个 "" 中有一个 , 时,那就是一个字符串?
    • @Jon 这是我修正的错字。回复:最好的地方?我想,在 VC 内部是一个不错的放置位置。放置它的最佳位置完全取决于您的应用程序。 :)
    • 谢谢戴夫。我尝试在 ViewDidLoad 中执行此操作,但现在打开应用程序需要很长时间。您还有其他建议吗?它在模拟器中运行良好,但在我的设备上,应用程序需要 30 秒才能打开。我需要这些数据来加载初始 tableView。
    • @Jon 它应该在后台线程上正常工作,然后在完成后将信息发送回主线程。
    • 好吧,我试试。我以前没有使用过线程,所以我必须阅读它。现在它最终崩溃了,因为我认为看门狗(苹果杀死了它)。