OSDN Git Service

ログが壊れているときにグラフが表示されなくなったりするのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 21 Jul 2017 15:05:55 +0000 (00:05 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 21 Jul 2017 15:05:55 +0000 (00:05 +0900)
KancolleSniffer/LogServer.cs

index 52e5405..af74ab9 100644 (file)
@@ -136,45 +136,83 @@ namespace KancolleSniffer
             var csv = path.Replace(".json", ".csv");\r
             var encoding = Encoding.GetEncoding("Shift_JIS");\r
             client.Send(encoding.GetBytes("{ \"data\": [\n"));\r
+            var battle = false;\r
+            var material = false;\r
             try\r
             {\r
-                if (File.Exists(csv))\r
+                if (!File.Exists(csv))\r
+                    return;\r
+                var records = 0;\r
+                if (path.EndsWith("遠征報告書.json"))\r
                 {\r
-                    var delimiter = "";\r
-                    var material = path.EndsWith("資材ログ.json"); // 末尾の空データを削除する必要がある\r
-                    var battle = path.EndsWith("海戦・ドロップ報告書.json"); // データを40個にそろえる必要がある\r
-                    foreach (var line in File.ReadLines(csv, encoding).Skip(1))\r
+                    records = 10;\r
+                }\r
+                else if (path.EndsWith("改修報告書.json"))\r
+                {\r
+                    records = 15;\r
+                }\r
+                else if (path.EndsWith("海戦・ドロップ報告書.json"))\r
+                {\r
+                    records = 38;\r
+                    battle = true;\r
+                }\r
+                else if (path.EndsWith("開発報告書.json"))\r
+                {\r
+                    records = 9;\r
+                }\r
+                else if (path.EndsWith("建造報告書.json"))\r
+                {\r
+                    records = 12;\r
+                }\r
+                else if (path.EndsWith("資材ログ.json"))\r
+                {\r
+                    records = 9;\r
+                    material = true;\r
+                }\r
+                else if (path.EndsWith("戦果.json"))\r
+                {\r
+                    records = 3;\r
+                }\r
+                var delimiter = "";\r
+                foreach (var line in File.ReadLines(csv, encoding).Skip(1))\r
+                {\r
+                    var data = line.Split(',');\r
+                    if (!DateTime.TryParseExact(data[0], Logger.DateTimeFormat, CultureInfo.InvariantCulture,\r
+                        DateTimeStyles.AssumeLocal, out DateTime date))\r
                     {\r
-                        var data = line.Split(',');\r
-                        DateTime date;\r
-                        if (!DateTime.TryParseExact(data[0], Logger.DateTimeFormat, CultureInfo.InvariantCulture,\r
-                            DateTimeStyles.AssumeLocal, out date) &&\r
-                            DateTime.TryParse(data[0], CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out date))\r
+                        if (DateTime.TryParse(data[0], CultureInfo.CurrentCulture,\r
+                            DateTimeStyles.AssumeLocal, out date))\r
                         {\r
                             data[0] = date.ToString(Logger.DateTimeFormat);\r
                         }\r
-                        if (date < from || to < date)\r
-                            continue;\r
-                        IEnumerable<string> entries = data;\r
-                        if (material)\r
-                            entries = data.Take(9);\r
-                        if (battle)\r
-                            entries = data.Concat(Enumerable.Repeat("", 3)).Take(38);\r
-                        if (number)\r
-                        {\r
-                            var stamp = ((date.ToUniversalTime().Ticks -\r
-                                          new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks) /\r
-                                         TimeSpan.TicksPerMillisecond).ToString();\r
-                            client.Send(encoding.GetBytes(delimiter + "[" + stamp + "," +\r
-                                                          string.Join(",", entries.Skip(1)) + "]"));\r
-                        }\r
                         else\r
                         {\r
-                            client.Send(encoding.GetBytes(delimiter + "[\"" +\r
-                                                          string.Join("\",\"", entries) + "\"]"));\r
+                            continue;\r
                         }\r
-                        delimiter = ",\n";\r
                     }\r
+                    if (date < from || to < date)\r
+                        continue;\r
+                    IEnumerable<string> entries = data;\r
+                    if (material)\r
+                        entries = data.Take(9);\r
+                    if (battle)\r
+                        entries = data.Concat(Enumerable.Repeat("", 3)).Take(38);\r
+                    if (entries.Count() != records)\r
+                        continue;\r
+                    if (number)\r
+                    {\r
+                        var stamp = ((date.ToUniversalTime().Ticks -\r
+                                      new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks) /\r
+                                     TimeSpan.TicksPerMillisecond).ToString();\r
+                        client.Send(encoding.GetBytes(delimiter + "[" + stamp + "," +\r
+                                                      string.Join(",", entries.Skip(1)) + "]"));\r
+                    }\r
+                    else\r
+                    {\r
+                        client.Send(encoding.GetBytes(delimiter + "[\"" +\r
+                                                      string.Join("\",\"", entries) + "\"]"));\r
+                    }\r
+                    delimiter = ",\n";\r
                 }\r
             }\r
             finally\r