使用NScanner来parsingCSV文件到字典数组

我创build了一个iPhone应用程序,它包含一个位置(lat,long,point)的字典数组。 我通过手动input每个值来创build数组。

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文件获取数据编程创build此数组。 我有一个.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 

我想通过使用NScannerparsingTestCSV.csv来创buildmyLocationArray(格式如图所示)。 我已经设置了parsing我的数据文件。

 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]; 

尽pipe我需要帮助。 我已经看了很多例子,但似乎这是我需要一些代码定制到我的应用程序。 在此先感谢您的时间。

我不明白你为什么一直在用扫描仪,因为你的结构是如此简单和可预见的。 从一个空的NSMutableArray开始。 你可以把文件分成几行:

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

现在枚举该数组。 对于每一行,你可以在逗号分割行:

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

数组nums是一个由三个NSString值组成的数组。 对于数组的前两个项目,将它们转换为双精度double值并将其包装在NSNumber中。 为该行制作NSDictionary并将其添加到NSMutableArray。

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

例如,一个字段中有换行符和逗号的特殊情况。 任何基于只用行和逗号分割的algorithm都会产生不正确的结果。 另请注意,Excel并不总是使用逗号作为分隔符,具体取决于语言环境。

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