【发布时间】:2017-09-03 20:15:39
【问题描述】:
如何使用这种 CSV 文件中的数据?或者我如何打印例如“内部”列的第 2 行值并将其分配给属性/实体?
我有这种从excel文件转换为数字的文件,我想抓取每一列的数据并使用它们。
以数字打开的原始CSV文件:
我得到的控制台输出:
使用这种方法:
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: "\r", with: "\n")
cleanFile = cleanFile.replacingOccurrences(of: "\n\n", with: "\n")
// cleanFile = cleanFile.replacingOccurrences(of: ";;", with: "")
// cleanFile = cleanFile.replacingOccurrences(of: ";\n", with: "")
return cleanFile
}
感谢 Jens Meder 的解决方案
使用
func csv(data: String) -> [[String]] {
var result: [[String]] = []
let rows = data.components(separatedBy: "\n")
for row in rows {
let columns = row.components(separatedBy: ";")
result.append(columns)
}
return result
}
在 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
【问题讨论】:
-
有什么问题?看来你已经读过数据了。
-
是的,我读过它,但我只有一个长字符串,我如何打印例如“内部”列的第 2 行值并将其分配给属性/实体?
-
您是否尝试搜索 Stack Overflow?您真的认为您是第一个想要将 CSV 文件拆分为组件的人吗?
-
显然!,事实上这段代码是我搜索的结果和我的另一个问题,但很多人向我解释说 CSV 很难操作,我最好更改文件扩展名,问题是这是不可能的。此外,所有解决方案都是针对不同的 CSV 文件量身定制的,我不知道如何解决此类问题。最后,设计模式在 swift 版本和答案之间发生了很大变化,所以我什至很难理解将 CSV 转换为字典或数组的主要内容