/// <summary> /// ファイルからGameResultTableを読み込む。 /// /// // 解釈できなかった行はnullになっている。 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public List <GameResultData> ReadOrCreate(string filePath) { var csv = CsvReadOrCreate(filePath); var list = new List <GameResultData>(); foreach (var line in csv) { list.Add(GameResultData.FromLine(line)); } return(list); }
/// <summary> /// CSV形式で読み込んだ1行から、この構造体を構築する。 /// </summary> /// <param name="list"></param> /// <returns></returns> public static GameResultData FromLine(List <string> list) { // データ壊れてない?おかしすぎ。この行をskipすべき。 if (list.Count < 11) { return(null); } try { var result = new GameResultData(); result.PlayerNames[0] = list[0]; result.PlayerNames[1] = list[1]; result.StartTime = DateTime.Parse(list[2]); result.EndTime = DateTime.Parse(list[3]); result.LastMove = Util.MoveFromString(list[4]); result.LastColor = Util.FromUsiColor(list[5].FirstChar()); result.KifuFileName = list[6]; result.GamePly = int.Parse(list[7]); result.BoardType = Util.FromBoardTypeString(list[8]); result.TimeSettingString = list[9]; result.Comment = list[10]; // あとから追加になったfieldは以前は存在していなかったものなので慎重に読み込む。 if (list.Count < 12 || !bool.TryParse(list[11], out result.Handicapped)) { result.Handicapped = false; } return(result); } catch { return(null); } }
/// <summary> /// CSVファイルに1行追加する。 /// </summary> /// <param name="filePath"></param> /// <param name="data"></param> public void AppendLine(string filePath, GameResultData data) { AppendLine(filePath, data.ToList()); }