使用 NScanner 将 CSV 文件解析为字典数组 [重复]

Posted

技术标签:

【中文标题】使用 NScanner 将 CSV 文件解析为字典数组 [重复]【英文标题】:Using NScanner to parse CSV File to Dictionary Array [duplicate] 【发布时间】: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];

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

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

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

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

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

【讨论】:

以上是关于使用 NScanner 将 CSV 文件解析为字典数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python解析CSV中的多维字典

避免 KeyError 的默认字典键

将 csv 文件转换为字典列表

从 csv 文件 python 解析一个字典

将字典转换为 CSV 文件 [重复]

将 CSV 文件的内容转换为字典