You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.5 KiB
98 lines
2.5 KiB
//
|
|
// ChipCountParser.swift
|
|
// TournamentStats
|
|
//
|
|
// Created by Laurent Morvillier on 27/06/2019.
|
|
// Copyright © 2019 Stax River. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import RealmSwift
|
|
import Realm
|
|
|
|
enum ChipCountColumns : CaseIterable {
|
|
case rank
|
|
case player
|
|
case chipcount
|
|
case trend
|
|
case city
|
|
case state
|
|
case country
|
|
}
|
|
|
|
class ChipCountParser {
|
|
|
|
static func start() -> ChipCountManager {
|
|
|
|
let realm = try! Realm()
|
|
|
|
var ccm = ChipCountManager(chipCounts: [], totalChips: 0.0)
|
|
|
|
try! realm.write {
|
|
|
|
let resourceName = "chipcount"
|
|
let path: String? = Bundle.main.path(forResource: resourceName, ofType: "")
|
|
if let path = path {
|
|
do {
|
|
let data = try String(contentsOfFile: path, encoding: .utf8)
|
|
ccm = ChipCountParser.parse(realm: realm, data: data)
|
|
} catch {
|
|
print(error)
|
|
}
|
|
} else {
|
|
print("could not find path for chipcount")
|
|
}
|
|
|
|
|
|
}
|
|
return ccm
|
|
}
|
|
|
|
static func parse(realm: Realm, data: String) -> ChipCountManager {
|
|
|
|
// cleanup raw data
|
|
let rawRows = data.split(separator: "\n")
|
|
var rows = rawRows.map { String($0) }
|
|
rows = rows.filter { !$0.isEmpty }
|
|
|
|
let columns = ChipCountColumns.allCases
|
|
let numberOfColumns = columns.count
|
|
|
|
let formatter = Formatter.importData
|
|
|
|
var playerName: String = ""
|
|
var totalChips: Double = 0.0
|
|
var ccs: [ChipCount] = []
|
|
|
|
for i in 0..<rows.count {
|
|
let row: String = rows[i]
|
|
|
|
let index = i % numberOfColumns
|
|
let currentColumn = columns[index]
|
|
|
|
switch currentColumn {
|
|
case .rank:
|
|
break
|
|
case .player:
|
|
playerName = row
|
|
case .chipcount:
|
|
let chips = formatter.number(from: row)?.doubleValue ?? 0.0
|
|
totalChips += chips
|
|
|
|
let cc = ChipCount(player: playerName, chips: chips)
|
|
ccs.append(cc)
|
|
case .trend:
|
|
break
|
|
case .city:
|
|
break
|
|
case .state:
|
|
break
|
|
case .country:
|
|
break
|
|
}
|
|
|
|
}
|
|
return ChipCountManager(chipCounts: ccs, totalChips: totalChips)
|
|
}
|
|
|
|
}
|
|
|