An amazing project that generates micro reports from tournament results
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.
pa-tournament-stats/TournamentStats/ChipCountParser.swift

97 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)
}
}