使用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这样的库,它将涵盖这些陷阱。