我正在尝试从文本文件导入数据。我可以阅读该文件,但我不知道如何将String
解析为其他内容,例如元组。
文件中的数据(text.txt
)被格式化为像素及其颜色
(((0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0)),((63479, 62451, 63479), (63479, 62451, 63479), (63479, 62451, 63479), (63479, 62451, 63479), (63479, 62451, 63479))
到目前为止,这是我的代码:
//
// ViewController.swift
import Cocoa
class ViewController: NSViewController {
@IBAction func passPix(_ sender: Any) {
let fileURL = "/Users/IMac/Desktop/text.txt"
var inString = ("Pix+Col")
do {
inString = try String(contentsOfFile: fileURL, encoding:String.Encoding.utf8)
} catch let error as NSError {
print("Failed reading from URL: \(fileURL), Error: " + error.localizedDescription)
}
print(inString)
}
}
答案 0 :(得分:1)
这是我的看法。基本上你用原始String中的方括号替换圆括号,将其转换为JSON对象,然后根据需要遍历生成的JSON对象:
let s = "(((0, 0), (1, 0), (2, 0), (3, 0), (4, 0)),((63479, 62451, 63479), (63479, 62451, 63479), (63479, 62451, 63479), (63479, 62451, 63479), (63479, 62451, 63479)))"
var js = String(s.characters.map { $0 == "(" ? "[" : $0 })
js = String(js.characters.map { $0 == ")" ? "]" : $0 })
var data = js.data(using: .utf8)
let json = try! JSONSerialization.jsonObject(with: data!) as! [Any]
let coords = json[0] as! [Any]
let rgbs = json[1] as! [Any]
for (i, coord) in coords.enumerated() {
print ("\(coord) - \(rgbs[i])")
}
输出将是这样的:
[0, 0] - [63479, 62451, 63479]
[1, 0] - [63479, 62451, 63479]
[2, 0] - [63479, 62451, 63479]
[3, 0] - [63479, 62451, 63479]
[4, 0] - [63479, 62451, 63479]
因此,在每次迭代中,您将得到一个具有x,y坐标的数组,另一个具有该像素的r,g,b颜色值。您可以轻松地将它们转换为元组,但我认为此时没有必要这样做。