【问题标题】:Separating a CSV file into separate arrays将 CSV 文件分成单独的数组
【发布时间】:2013-10-02 18:13:44
【问题描述】:

好的,首先我是一个初学者,所以我还在学习。 所以我有这个世界城市的文件。它看起来像这样:

     City,Country,Latitude,Longitude
     Aberdeen, Scotland,57.15,-2.15
     Adelaide, Australia,-34.91666667,138.6
     Algiers, Algeria,36.83333333,3
     Amsterdam, Netherlands,52.36666667,4.883333333
     Ankara, Turkey,39.91666667,32.91666667
     AsunciÛn, Paraguay,-25.25,-57.66666667
     Athens, Greece,37.96666667,23.71666667
     Auckland, New Zealand,-36.86666667,174.75
     Bangkok, Thailand,13.75,100.5  

我必须将所有这些文件放入单独的并行数组中,我想使用纬度和经度来计算距离,这没什么大不了的,问题是我想将它们放入 C 样式的数组中并且我不知道如何在 Objective C 中做到这一点。我知道你可以使用 NSArray 但这似乎对我不起作用。我如何在目标 c 中做到这一点。我已经通过这样做将文件读入 NSString

     anotherLine = [NSString stringWithContentsOfFile:docDirectory encoding:NSStringEncodingConversionAllowLossy error:nil];

//docDirectory 是我的文件所在的位置

如何将此 NSString 放入 4 个单独的数组 (cities[max],countries[max], latitude[max], longitude[max]) 。 再说一次,我仍然是目标 c 的初学者,我确实知道一些关于 c++ 的东西,所以我试图让它尽可能接近 c。

【问题讨论】:

  • 阅读 NSString 规范 -- componentsSeparatedByString 等。
  • @HotLicks 你能举个例子吗?
  • 您能阅读规范吗?首先拆分为行,然后将每行拆分为列,然后将列值分配给它们各自的数组。非常简单,您需要的一切都在 NSString 规范中(可能还有 NSMutableArray)。
  • (更不用说这是一个常见的问题,所以如果你寻找它们,这里可能有30个很好的例子。)

标签: objective-c arrays csv nsstring nsarray


【解决方案1】:

你可以试试这个:

NSMutableArray* cities = [NSMutableArray array];
NSMutableArray* countries = [NSMutableArray array];
NSMutableArray* latitude = [NSMutableArray array];
NSMutableArray* longitude = [NSMutableArray array];

// read everything from text
NSString* fileContents =
[NSString stringWithContentsOfFile:docDirectory encoding:NSStringEncodingConversionAllowLossy error:nil];

// first, separate by new line
NSArray* allLinedStrings =
[fileContents componentsSeparatedByCharactersInSet:
 [NSCharacterSet newlineCharacterSet]];


[allLinedStrings enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if (idx > 0) //Ignore first line column header
    {
        NSArray* columnsFile = [((NSString*)obj) componentsSeparatedByString:@","];
        [cities addObject:[columnsFile objectAtIndex:0]];
        [countries addObject:[columnsFile objectAtIndex:1]];
        [latitude addObject:[columnsFile objectAtIndex:2]];
        [longitude addObject:[columnsFile objectAtIndex:3]];
    }
}];

【讨论】:

  • 你能给我解释一下 enumarateObjectsUsingBlock 方法吗?
  • 相当于 for 语句 read NSArray Apple doc developer.apple.com/library/mac/documentation/Cocoa/Reference/…
  • @Juan - 这是一个混淆的for 循环。
  • 由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]' *** 首先抛出调用堆栈:
  • columnsFile数组设置不正确,在if块的第一行下一个断点检查一下
猜你喜欢
  • 2018-02-17
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多