• R/O
  • SSH
  • HTTPS

protra: Commit


Commit MetaInfo

Revision518 (tree)
Time2014-04-14 20:51:52
Authorpanacoran

Log Message

PriceDataUpdatorの重複上場銘柄の処理を簡略化する

* Protra.Lib/Update/PriceDataUpdator.cs (PriceDataUpdator.UpdatePrice): 上記のとおり。

Change Summary

Incremental Difference

--- protra/trunk/ChangeLog.txt (revision 517)
+++ protra/trunk/ChangeLog.txt (revision 518)
@@ -1,3 +1,9 @@
1+2014-04-14 panacoran <panacoran@users.sourceforge.jp>
2+
3+ PriceDataUpdatorの重複上場銘柄の処理を簡略化する
4+
5+ * Protra.Lib/Update/PriceDataUpdator.cs (PriceDataUpdator.UpdatePrice): 上記のとおり。
6+
17 2014-04-13 panacoran <panacoran@users.sourceforge.jp>
28
39 PriceDataUpdatorのサブクラスに継承で日付を渡すのをやめる
--- protra/trunk/Protra.Lib/Update/PriceDataUpdator.cs (revision 517)
+++ protra/trunk/Protra.Lib/Update/PriceDataUpdator.cs (revision 518)
@@ -445,7 +445,7 @@
445445 _progress.Show(worker, date);
446446 var dl = new DownloadUtil(DownloadUrl(date));
447447 _progress.StartDownload();
448- var prices = new List<Price>();
448+ var prices = new SortedDictionary<string, Price>();
449449 using (var stream = dl.DownloadAndExtract())
450450 {
451451 _progress.FinishDownload();
@@ -463,33 +463,20 @@
463463 using (var reader = new StreamReader(stream, Encoding.GetEncoding("shift_jis")))
464464 {
465465 string line;
466- Price prev = null;
467466 while ((line = reader.ReadLine()) != null)
468467 {
469- var tmp = ParseLine(line, date);
470- if (tmp == null)
468+ var price = ParseLine(line, date);
469+ if (price == null)
471470 continue;
472- if (prev == null)
473- {
474- prev = tmp;
475- continue;
476- }
477- if (prev.Code == tmp.Code)
478- {
479- // 重複上場の場合は出来高の大きなほうを優先する。
480- if (tmp.Volume > prev.Volume)
481- prev = tmp;
482- continue;
483- }
484- prices.Add(prev);
485- prev = tmp;
471+ var code = price.Code;
472+ // 重複上場の場合は出来高の大きなほうを優先する。
473+ if (!prices.ContainsKey(code) || price.Volume > prices[code].Volume)
474+ prices[code] = price;
486475 }
487- if (prev != null)
488- prices.Add(prev);
489476 }
490477 }
491478 _progress.RecordsPerDay = prices.Count;
492- foreach (var price in prices)
479+ foreach (var price in prices.Values)
493480 {
494481 if (worker.CancellationPending)
495482 {
Show on old repository browser