【问题标题】:Using NScanner to parse CSV File to Dictionary Array [duplicate]使用 NScanner 将 CSV 文件解析为字典数组 [重复]
【发布时间】:2013-05-12 00:41:49
【问题描述】:

我创建了一个 iPhone 应用程序,其中包含一个位置字典数组(纬度、经度、点)。我通过手动输入每个值来创建数组。

myLocationArray = @[
                 @{
                   kStation : @"1",
                   kLatitude : @( 41.656467),
                   kLongitude : @(-81.277963)
                   },
                 @{
                   kStation : @"2",
                   kLatitude : @(41.657118),
                   kLongitude : @(-81.276545)
                   },
                 @{
                   kStation : @"3",
                   kLatitude : @(41.658493),
                   kLongitude : @(-81.273542)
                   },
                  ...

这很好,但现在我想通过从 .CSV 文件中获取数据以编程方式创建这个数组。我有一个看起来像这样的 .CSV 文件 (TestCSV.csv)。

41.656467,-81.277963,27200
41.657118,-81.276545,27650
41.658493,-81.273542,28631.5
41.660728,-81.268547,30195
41.661830,-81.266065,30991
41.662828,-81.263819,31700
41.663677,-81.261962,32300
41.664578,-81.259909,32950
41.666210,-81.256312,34100
41.666921,-81.254708,34605
41.668043,-81.252191,35400
41.669044,-81.250043,36099

我想通过使用 NScanner 解析 TestCSV.csv 来创建 myLocationArray(格式如图所示)。我已设置解析我的数据文件。

NSString *pathToFile =[[NSBundle mainBundle] pathForResource:@"TestCSV" ofType: @"csv"];

NSString *fileString = [NSString stringWithContentsOfFile:pathToFile     encoding:NSUTF8StringEncoding error:nil];

if (!fileString) {
NSLog(@"Error reading file.");
}

NSScanner *scanner = [NSScanner scannerWithString:fileString];

不过,我需要这里的帮助。我看过很多例子,但似乎这就是我需要为我的应用程序定制一些代码的地方。在此先感谢您的时间。

【问题讨论】:

    标签: ios objective-c nsarray nsdictionary nsscanner


    【解决方案1】:

    我完全不明白您为什么要使用扫描仪,因为您的结构是如此简单和可预测。从一个空的 NSMutableArray 开始。您可以将文件分成如下几行:

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

    现在枚举那个数组。对于每一行,您可以用逗号分隔该行:

    NSArray *nums = [oneLine componentsSeparatedByString:@","];
    

    数组nums 是一个包含三个 NSString 值的数组。对于数组的前两项,使用doubleValue 将它们转换为双精度数并将其包装在一个NSNumber 中。为该行创建 NSDictionary 并将其添加到 NSMutableArray。

    【讨论】:

    • 感谢您的回复。我实际上已经在研究这个选项。请在stackoverflow.com/questions/16499180/… 看看我的问题。具体来说,Anupdas 的回答是我正在尝试并遇到的问题。
    • 请不要重复同一个问题。
    【解决方案2】:

    不要尝试重新发明轮子,因为 CSV 文件格式存在一些缺陷(甚至没有特别明确的定义)。

    例如,字段中存在换行符和逗号的特殊情况。给定这样的输入,任何仅基于行和逗号分割的算法都会产生不正确的结果。另请注意,Excel 并不总是使用逗号作为分隔符,具体取决于区域设置。

    使用像CHCSVParser 这样的库,它会涵盖这些陷阱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2016-05-08
      • 2014-10-19
      • 2015-08-16
      • 2022-07-04
      • 2013-06-08
      • 2018-11-07
      相关资源
      最近更新 更多