use*_*601 10 csv arrays macos import swift
我在去年使用Objective-C.现在我正在尝试使用swift的Xcode 6 beta 4.
我想将.csv格式导入我的网络服务器到一个数组.我在Objective-C中的旧代码是:
NSString *stringURL = @"https:// [URL] /versionen/versionen.csv";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];
if ( urlData )
{
NSString *csvResponseString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
NSArray *MZVersionDatenZeilen = [csvResponseString componentsSeparatedByString:@"\n"];
NSEnumerator *MZVersionEnumerator = [MZVersionDatenZeilen objectEnumerator];
NSMutableArray *MZVersionDatenArray = [NSMutableArray arrayWithCapacity:[MZVersionDatenZeilen count]];
NSString *MZVersionZeile;
while (MZVersionZeile = [MZVersionEnumerator nextObject])
{
[MZVersionDatenArray addObject:[MZVersionZeile componentsSeparatedByString:@";"]];
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在Swift中这样做?有最佳做法 - 推荐吗?
Ale*_*der 13
有多个swift库可用:
CSVImporter,它是一个适用于处理大型csv文件的异步解析器.
let path = "path/to/your/CSV/file"
let importer = CSVImporter<[String]>(path: path)
importer.startImportingRecords { $0 }.onFinish { importedRecords in
for record in importedRecords {
// record is of type [String] and contains all data in a line
}
}
Run Code Online (Sandbox Code Playgroud)
SwiftCSV,它是OSX和iOS的简单CSV解析库.
let csvURL = NSURL(string: "users.csv")!
var error: NSErrorPointer = nil
let csv = CSV(contentsOfURL: csvURL, error: error)
// Rows
let rows = csv.rows
let headers = csv.headers //=> ["id", "name", "age"]
let alice = csv.rows[0] //=> ["id": "1", "name": "Alice", "age": "18"]
let bob = csv.rows[1] //=> ["id": "2", "name": "Bob", "age": "19"]
// Columns
let columns = csv.columns
let names = csv.columns["name"] //=> ["Alice", "Bob", "Charlie"]
let ages = csv.columns["age"] //=> ["18", "19", "20"]
Run Code Online (Sandbox Code Playgroud)
和CSwiftV,这是一个符合rfc4180规范的csv解析器,但据作者说,它全部在内存中,因此不适合大文件.
let inputString = "Year,Make,Model,Description,Price\r\n1997,Ford,E350,descrition,3000.00\r\n1999,Chevy,Venture,another description,4900.00\r\n"
let csv = CSwiftV(String: inputString)
let headers = csv.headers // ["Year","Make","Model","Description","Price"]
let rows = csv.rows
// [
// ["1997","Ford","E350","descrition","3000.00"],
// ["1999","Chevy","Venture","another description","4900.00"]
// ]
Run Code Online (Sandbox Code Playgroud)
Wil*_* T. 11
每个答案都要求您安装/下载第三方实用程序,但如果您使用的文件非常简单或者您在限制第三方代码的公司工作,那么这可能不是最佳选择.
所以我想我会发布令人难以置信的基本的常规CSV文件处理代码,人们可以将其作为基础并根据需要进行简单的CSV处理.
do {
let file = try String(contentsOf: fileUrl)
let rows = file.components(separatedBy: .newlines)
for row in rows {
let fields = row.replacingOccurrences(of: "\"", with: "").components(separatedBy: ",")
print(fields)
}
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
这将处理您知道没有引号和逗号作为字段内容的一部分的任何CSV文件,在我的情况下,这些文件是大多数CSV文件.比这更复杂的东西,我建议使用其他答案中发布的一个库.
我希望这可以节省一些打字的人.
根据目前最受欢迎的答案,不要使用SwiftCSV.
SwiftCSV目前不处理双引号,因此如果CSV文件中的任何数据中包含换行符或逗号,SwiftCSV将无效.而且你可能浪费宝贵的开发时间找出它无法正常工作的原因......为了节省你的时间,只需使用另一个库.
该CSwiftV库的工作对我非常好: https://github.com/Daniel1of1/CSwiftV
它处理引用的文本,换行符,逗号,就像我的数据上的魅力一样.它还具有单元测试并符合rfc4180标准.
| 归档时间: |
|
| 查看次数: |
18778 次 |
| 最近记录: |