swift 3.1 如何从 CSV 获取数组或字典 [英] swift 3.1 how to get array or dictionary from CSV
问题描述
我如何使用这种 CSV 文件中的数据?或者我如何打印例如内部"列的第 2 行值并将其分配给属性/实体?
How could I use data in this kind of CSV file? Or how could I print for example row 2 value for "inside" column and assign it to a property / entity?
我有一种从 excel 文件中得到的转换为 Numbers 的文件,我想获取每一列的数据并使用它们.
I have this kind of file I got from excel file converted to Numbers, I'd like to grab data for each column and use them.
以数字打开的原始 CSV 文件:
The original CSV file opened in numbers:
我得到的控制台输出:
使用这种方法:
func readDataFromCSV(fileName:String, fileType: String)-> String!{
guard let filepath = Bundle.main.path(forResource: fileName, ofType: fileType)
else {
return nil
}
do {
var contents = try String(contentsOfFile: filepath, encoding: .utf8)
contents = cleanRows(file: contents)
return contents
} catch {
print("File Read Error for file (filepath)")
return nil
}
}
func cleanRows(file:String)->String{
var cleanFile = file
cleanFile = cleanFile.replacingOccurrences(of: "
", with: "
")
cleanFile = cleanFile.replacingOccurrences(of: "
", with: "
")
// cleanFile = cleanFile.replacingOccurrences(of: ";;", with: "")
// cleanFile = cleanFile.replacingOccurrences(of: ";
", with: "")
return cleanFile
}
感谢 Jens Meder 的解决方案
SOLUTION thanks to Jens Meder
使用
func csv(data: String) -> [[String]] {
var result: [[String]] = []
let rows = data.components(separatedBy: "
")
for row in rows {
let columns = row.components(separatedBy: ";")
result.append(columns)
}
return result
}
在视图中DidLoad
in viewDidLoad
var data = readDataFromCSV(fileName: kCSVFileName, fileType: kCSVFileExtension)
data = cleanRows(file: data!)
let csvRows = csv(data: data!)
print(csvRows[1][1]) // UXM n. 166/167
推荐答案
您想要做的是将字符串拆分成行,然后拆分成列(基本上是一个二维的字符串数组).Swift 已经为此提供了 components
方法在 String
结构上.
What you want to do is splitting up the string in rows and then into columns (basically a two dimensional array of Strings). Swift already provides the components
method for that on String
structs.
func csv(data: String) -> [[String]] {
var result: [[String]] = []
let rows = data.components(separatedBy: "
")
for row in rows {
let columns = row.components(separatedBy: ";")
result.append(columns)
}
return result
}
然后您可以通过以下方式访问任何值:
Then you can access any value via:
var data = readDataFromCSV(fileName: kCSVFileName, fileType: kCSVFileExtension)
data = cleanRows(file: data)
let csvRows = csv(data: data)
print(csvRows[1][1]) //UXM n. 166/167.
这篇关于swift 3.1 如何从 CSV 获取数组或字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!