【问题标题】:Reading data from .xls/.csv files into iOS将 .xls/.csv 文件中的数据读入 iOS
【发布时间】:2014-02-15 17:08:07
【问题描述】:

我是 iOS 新手,正在尝试将电子表格的内容读入 iOS 数组。 我使用的电子表格是一个简单的 3 x 2 数组,第一列是数字,第二列是文本。我尝试在 .xls、.xlsx、.xls、.xlsx 和不带列标题的情况下阅读它cdv, .txt (unicode 和 delimited) 但没有成功。该文件名为“funds”,我使用的代码是:

NSData       *databuffer;
NSFileHandle * file;
NSString     *docDir  = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES)[0];
NSString     *fileDir = [docDir stringByAppendingPathComponent:@"funds.xls"];

file = [NSFileHandle fileHandleForReadingAtPath:fileDir];
if (file == nil) NSLog (@"Failed to open file");

[file seekTOOffset: 10];
databuffer = [file readDataOfLength: 5];
[file closeFile];

它找到文件的目录但在[NSFileHandle fileHandleForReadingAtPath:fileDir] 处放弃。

我该怎么办?我需要帮助确认我应该使用什么文件类型作为源,以及如何将它读入数组。

解决此问题后,我可能需要读取大量数据、几列、4k 行、文本和非整数的混合。

当数据量达到那个大小时,我应该使用什么格式或方法?

【问题讨论】:

  • 文件在哪里?在你的包里?
  • 抱歉这么久才回复,工作已经赶上我了。该文件存储在捆绑包中。 altyus 的回复似乎是最好的长期解决方案,但我正在努力了解 github!

标签: ios excel csv file-io


【解决方案1】:

一定要从CSV format的Excel中导出数据。

使用NSFileManager访问文件很容易:

NSString *pathName = ...;  /// fill in the file's pathname
NSFileManager *fm = [NSFileManager defaultManager];
if ([fm fileExistsAtPath:pathName]) {
    // read the file contents, see below
}

对于小文件,你可以说:

NSString *lines = [NSString stringWithContentsOfFile:filePath];

然后继续将字符串拆分为行,并处理每一行。

对于大文件,最好看看一些更复杂的技术,比如Objective-C: Reading a file line by line

至于解析 CSV 行,使用 NSString 方法 componentsSeparatedByString 标记每一行,类似于:

NSArray *fields = [line componentsSeparatedByString:@","];

实际上,这也是您将读取的文件内容拆分为单独行的方法。只需注意换行符(CR LF 或 LF)。你会在how to split a string with newlines找到一些东西。

【讨论】:

  • 这不会正确解析带有逗号的行。 .csv 文件的值可能包含逗号,例如 One, "String, with, comma", Three
  • 它也不会处理引用的值。这只是一个天真的例子。让我们希望现在人们已经找到了 RFC 4180 并且正在使用一个不错的 CSV 解析器库。
  • 如果您有阻止 CSV 导出的元素(例如工作簿中的多个工作表),也没有多大帮助。
【解决方案2】:

有一个非常流行的 CocoaPod / Github 项目,它可以编写和解析 CSV 文件。 https://github.com/davedelong/CHCSVParser

【讨论】:

  • 由于 OP 在 iOS 上是新的,可能很难接受 CocoaPods,但这对于以后的工作来说会很好。我也发现这很有用,所以感谢您指出。
  • 这就是为什么我一定要提到还有一个 Github 项目。随附的 Github 链接包含有关通过克隆 Github 存储库直接添加项目的说明。但是,如果发帖者对使用 Cocoa Pods 感兴趣(他应该是),这里有一个关于在您的项目中使用可可豆荚的链接(非常简单)。 cocoapods.org 并点击“开始”。
  • 我同意,开始使用 CocoaPods 比人们想象的要容易。即使是像 CSV 这样的简单格式也有一些潜在的复杂性,所以最好有一个可靠的组件。另外,它使用 NSInputStream,所以对于大文件也应该没问题。
【解决方案3】:

你可以找到here: Where can I find a CSV to NSArray parser for Objective-C? 非常相似的问题,顺便说一句。将 CSV 转换为 JSON 应该可以帮助您解析数据,因为 JSON 可以很容易地转换为 NSDictionary 或 NSArray。

【讨论】:

    【解决方案4】:

    我使用 Numbers 创建 csv,当我在表格中添加“,”时出现问题。 我使用一些技巧来修复它。 抱歉,我尝试在此处添加示例代码,但太长了。

    https://github.com/LovePick/CSVParser-Swift

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      相关资源
      最近更新 更多