Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import UIKit
- import SQLite
- class ViewController: UIViewController {
- let urlDb = "/Users/nguyen.van.thieub/Documents/thieumaofull.sqlite3"
- override func viewDidLoad() {
- super.viewDidLoad()
- // self.createTable("maotable")
- // self.insertRow("maotable", key: "a1", enValue: "en 1", jaValue: "ja 1")
- // self.insertRow("maotable", key: "a2", enValue: nil, jaValue: "ja 2")
- // self.insertRow("maotable", key: "a3", enValue: "en 3", jaValue: nil)
- // self.insertRow("maotable", key: "a4", enValue: nil, jaValue: nil)
- // self.insertRow("maotable", key: "a5", enValue: "en 5", jaValue: "ja 5")
- //
- // self.createTable("maotable2")
- // self.insertRow("maotable2", key: "a1", enValue: "en 1", jaValue: "ja 1")
- // self.insertRow("maotable2", key: "a2", enValue: nil, jaValue: "ja 2")
- // self.insertRow("maotable2", key: "a3", enValue: "en 3", jaValue: nil)
- // self.insertRow("maotable2", key: "a4", enValue: nil, jaValue: nil)
- // self.insertRow("maotable2", key: "a5", enValue: "en 5", jaValue: "ja 5")
- //
- // self.createTable("maotable3")
- // self.insertRow("maotable3", key: "a1", enValue: "en 1", jaValue: "ja 1")
- // self.insertRow("maotable3", key: "a2", enValue: nil, jaValue: "ja 2")
- // self.insertRow("maotable3", key: "a3", enValue: "en 3", jaValue: nil)
- // self.insertRow("maotable3", key: "a4", enValue: nil, jaValue: nil)
- // self.insertRow("maotable3", key: "a5", enValue: "en 5", jaValue: "ja 5")
- //
- // self.createTable("maotab")
- // self.insertRow("maotab", key: "a1", enValue: "en 1", jaValue: "ja 1")
- // self.insertRow("maotab", key: "a2", enValue: nil, jaValue: "ja 2")
- // self.insertRow("maotab", key: "a3", enValue: "en 3", jaValue: nil)
- // self.insertRow("maotab", key: "a4", enValue: nil, jaValue: nil)
- // self.insertRow("maotab", key: "a5", enValue: "en 5", jaValue: "ja 5")
- //
- // self.createTable("maot3")
- // self.insertRow("maot3", key: "a1", enValue: "en 1", jaValue: "ja 1")
- // self.insertRow("maot3", key: "a2", enValue: nil, jaValue: "ja 2")
- // self.insertRow("maot3", key: "a3", enValue: "en 3", jaValue: nil)
- // self.insertRow("maot3", key: "a4", enValue: nil, jaValue: nil)
- // self.insertRow("maot3", key: "a5", enValue: "en 5", jaValue: "ja 5")
- let url = Bundle.main.resourceURL!
- do {
- let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles)
- var i = 0
- for url in urls {
- if url.pathExtension == "yml" {
- do {
- i = i + 1
- print(">>>>>> ",i," ", url.lastPathComponent)
- let text = try String(contentsOf: url, encoding: String.Encoding.utf8)
- let myStrings = text.components(separatedBy: .newlines)
- var j = -3
- var nameTable = ""
- var key = ""
- var enValue : String? = nil
- var jaValue : String? = nil
- var isJa = true
- for myString in myStrings {
- j = j + 1
- if (myString.characters.count == 0) {
- continue
- }
- switch j {
- case -2: // en hay ja
- if self.removeEndString(myString) == "ja" {
- isJa = true
- } else {
- isJa = false
- }
- // print(self.removeEndString(myString), " = ", isJa)
- print(j, ":: ", self.removeEndString(myString))
- break
- case -1: // masters
- print(j, ":: ", self.removeEndString(myString))
- break
- case 0: // name table
- nameTable = self.removeEndString(myString)
- self.createTable(nameTable)
- print(j, ":: ", self.removeEndString(myString))
- break
- default: // .first = key, .second = value
- if (j == 56) {
- }
- let myCutString = self.cutString(myString)
- key = myCutString.first
- jaValue = nil
- enValue = nil
- if isJa {
- jaValue = myCutString.second
- } else {
- enValue = myCutString.second
- }
- if let id = self.isExist(nameTable, key: key) {
- let row = self.getRowData(nameTable, key: key)
- if let value = row.enValue {
- enValue = value
- }
- if let value = row.jaValue {
- jaValue = value
- }
- self.updateRow(nameTable, idTable: id, key: key, enValue: enValue, jaValue: jaValue)
- } else {
- self.insertRow(nameTable, key: key, enValue: enValue, jaValue: jaValue)
- }
- print(j, ":: ", myCutString.first, " - ", myCutString.second)
- break
- }
- }
- // print(text)
- }
- catch {
- print("catch i=", i, " ", url.lastPathComponent)
- }
- }
- }
- } catch {
- print(error)
- }
- }
- func removeEndString(_ myString: String) -> String {
- let trimmedString = myString.trimmingCharacters(in: .whitespaces)
- return trimmedString.chopSuffix()
- }
- func cutString (_ myString: String) -> (first: String, second: String) {
- let trimmedString = myString.trimmingCharacters(in: .whitespaces)
- let myStrings = trimmedString.components(separatedBy: ":")
- if (myStrings.count == 2) {
- let firstString = myStrings[0].trimmingCharacters(in: .whitespaces)
- var secondString = myStrings[1].trimmingCharacters(in: .whitespaces)
- secondString = secondString.chopSuffix()
- secondString = secondString.chopPrefix()
- return (first: firstString, second: secondString)
- }
- return (first: "", second: "")
- }
- func createTable(_ nameTable: String) {
- do {
- let db = try Connection(self.urlDb)
- let table = Table(nameTable)
- let id = Expression<Int64>("id")
- let key = Expression<String>("key")
- let enValue = Expression<String?>("enValue")
- let jaValue = Expression<String?>("jaValue")
- try db.run(table.create { t in
- t.column(id, primaryKey: true)
- t.column(key, unique: true)
- t.column(enValue)
- t.column(jaValue)
- })
- }
- catch {
- }
- }
- func insertRow(_ nameTable: String, key: String, enValue: String?, jaValue: String?) {
- do {
- let db = try Connection(self.urlDb)
- let table = Table(nameTable)
- let key_field = Expression<String>("key")
- let enValue_field = Expression<String?>("enValue")
- let jaValue_field = Expression<String?>("jaValue")
- let insert = table.insert(key_field <- key, enValue_field <- enValue, jaValue_field <- jaValue)
- try db.run(insert)
- }
- catch {
- }
- }
- func updateRow(_ nameTable: String, idTable: Int64, key: String, enValue: String?, jaValue: String?) {
- do {
- let db = try Connection(self.urlDb)
- let table = Table(nameTable)
- let id_field = Expression<Int64>("id")
- let key_field = Expression<String>("key")
- let enValue_field = Expression<String?>("enValue")
- let jaValue_field = Expression<String?>("jaValue")
- let alice = table.filter(id_field == idTable)
- try db.run(alice.delete())
- let insert = table.insert(id_field <- idTable, key_field <- key, enValue_field <- enValue, jaValue_field <- jaValue)
- let id = try db.run(insert)
- print("Khong duoc ah", id)
- } catch {
- }
- }
- func getRowData(_ nameTable: String, key: String) -> (key: String?, enValue: String?, jaValue: String?) {
- do {
- let db = try Connection(self.urlDb)
- for row in try db.prepare("SELECT key, enValue, jaValue FROM " + nameTable) {
- if let keyValue = row[0] as? String, keyValue == key {
- return (key: keyValue, enValue: row[1] as! String?, jaValue: row[2] as! String?)
- }
- }
- } catch {
- }
- return (key: nil, enValue: nil, jaValue: nil)
- }
- func isExist(_ nameTable: String, key: String) -> Int64? {
- do {
- let db = try Connection(self.urlDb)
- for row in try db.prepare("SELECT id, key FROM " + nameTable) {
- if let value = row[0] as? Int64, let keyValue = row[1] as? String, keyValue == key {
- return value
- }
- }
- }
- catch {
- }
- return nil
- }
- }
- extension String {
- func chopPrefix(_ count: Int = 1) -> String {
- return self.substring(from: self.characters.index(self.startIndex, offsetBy: count))
- }
- func chopSuffix(_ count: Int = 1) -> String {
- return self.substring(to: self.characters.index(self.endIndex, offsetBy: -count))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment