static void save(StockSplitInfo[] infos, splitType filename) { var data = tryGet(a => true, filename); var ex = infos.Except(data); if (!ex.Any()) { StockPriceManager.SetMessage(DataSource.KabuDotCom, "新規データが存在しなかったため書き込み処理をスキップしました。"); return; } if (!Directory.Exists(localPath)) { Directory.CreateDirectory(localPath); } string tgtPath = localPath + filename.toFileName(); try { using (FileStream f = new FileStream(tgtPath, FileMode.Create)) { var seri = new XmlSerializer(typeof(StockSplitInfo[])); seri.Serialize(f, data.Union(infos).ToArray()); StockPriceManager.SetMessage(DataSource.KabuDotCom, filename.toDisplayName() + "データを保存しました。"); } } catch (Exception e) { StockPriceManager.SetMessage(new ManagementMessage() { Sender = DataSource.KabuDotCom, Signal = MessageSignal.Error, Message = "書き込み処理に失敗しました。", Detail = e.Message, }); } }
private static string getUrl(this splitType _self) { if (_self == splitType.split) { return("http://kabu.com/investment/meigara/bunkatu.html"); } else { return("http://kabu.com/investment/meigara/gensi.html"); } }
private static string toFileName(this splitType _self) { if (_self == splitType.split) { return("StockSplitInfo.xml"); } else { return("StockConsolidationInfo.xml"); } }
private static string toDisplayName(this splitType _self) { if (_self == splitType.split) { return("株式分割"); } else { return("株式併合"); } }
/// <summary> /// Gera um array a partir de uma string sendo nescessário indicar apenas o /// tipo de caracter que irá servir como split e a string a ser trabalhada no array. /// </summary> /// <param name="strFile">String da qual será gerado a Array de string</param> /// <param name="splitCaracter">Tipo de caracter a ser usado como separador no split</param> /// <returns>Array preenchido com valores do tipo string de acordo com a Quantidade de separadores encontrados na string </returns> /// <remarks></remarks> /// <exemplo> /// /// string = "text1/text2/text3/text4/text5" onde o separador e o caracter "/" /// /// o retorno será um array com 5 posições /// string(0)= text1 /// string(1)= text2 /// string(2)= text3 /// string(3)= text4 /// string(4)= text5 /// </exemplo> public static String[] arrayOfTextFile(string strFile, splitType splitCaracter) { try { string[] arrayFile = null; char splitCarac = (char)defineSplitType(splitCaracter); arrayFile = strFile.Split(splitCarac); return(arrayFile); } catch (Exception ex) { throw ex; } }
/// <summary> /// Define um caracter para ser usado como separador na função Split() /// </summary> /// <param name="splitType">Tipo de caracter a ser usado com separador (ENUM)</param> /// <returns>o caracter a ser usado como separador</returns> /// <remarks></remarks> public static char defineSplitType(splitType st) { char splitCaracter; switch (st) { case splitType.BARRA: splitCaracter = '/'; break; case splitType.BARRA_INVERTIDA: splitCaracter = '\\'; break; case splitType.DOIS_PONTOS: splitCaracter = ':'; break; case splitType.PIPE: splitCaracter = '|'; break; case splitType.PONTO_VIRGULA: splitCaracter = ';'; break; case splitType.VIRGULA: splitCaracter = ','; break; case splitType.E_COMERCIAL: splitCaracter = '&'; break; case splitType.EXCLAMACAO: splitCaracter = '!'; break; case splitType.CIFRAO: splitCaracter = '$'; break; default: splitCaracter = '|'; break; } return(splitCaracter); }
static IEnumerable <StockSplitInfo> _download(splitType type) { string str = ""; try { str = getSource(type.getUrl()).Result; StockPriceManager.SetMessage(DataSource.KabuDotCom, type.toDisplayName() + "データのダウンロード完了"); } catch (Exception e) { StockPriceManager.SetMessage(new ManagementMessage() { Sender = DataSource.KabuDotCom, Signal = MessageSignal.Error, Message = "接続エラー", Detail = e.Message, }); return(new StockSplitInfo[0]); } HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(str); try { var dd = doc.DocumentNode //.SelectNodes(@"table[@class=""tbl01""]"); .SelectNodes(@"//table[@class='tbl01']") .Descendants("tr") .Select(a => new { Prm = a.Elements("td").Select(e => e.InnerText) }) //.Select(a => ResultWithValue.Of<IEnumerable<string>, StockSplitInfo>(tryParse, a.Prm)) //.Where(a => a.Result) //.Select(a => a.Value); .Where(a => a.Prm.Any()) .Select(a => parse(a.Prm)); StockPriceManager.SetMessage(DataSource.KabuDotCom, type.toDisplayName() + "データの解析完了"); return(dd); }catch (Exception e) { StockPriceManager.SetMessage(new ManagementMessage() { Sender = DataSource.KabuDotCom, Signal = MessageSignal.Error, Message = "解析エラー", Detail = e.Message, }); return(new StockSplitInfo[0]); } }
/// <summary> /// Define um caracter para ser usado como separador na função Split() /// </summary> /// <param name="splitType">Tipo de caracter a ser usado com separador (ENUM)</param> /// <returns>o caracter a ser usado como separador</returns> /// <remarks></remarks> public static char defineSplitType(splitType st) { char splitCaracter; switch (st) { case splitType.BARRA: splitCaracter = '/'; break; case splitType.BARRA_INVERTIDA : splitCaracter = '\\'; break; case splitType.DOIS_PONTOS : splitCaracter = ':'; break; case splitType.PIPE : splitCaracter = '|'; break; case splitType.PONTO_VIRGULA: splitCaracter = ';'; break; case splitType.VIRGULA: splitCaracter = ','; break; case splitType.E_COMERCIAL : splitCaracter = '&'; break; case splitType.EXCLAMACAO : splitCaracter = '!'; break; case splitType.CIFRAO : splitCaracter = '$'; break; default: splitCaracter = '|'; break; } return splitCaracter; }
/// <summary> /// Gera um array a partir de uma string sendo nescessário indicar apenas o /// tipo de caracter que irá servir como split e a string a ser trabalhada no array. /// </summary> /// <param name="strFile">String da qual será gerado a Array de string</param> /// <param name="splitCaracter">Tipo de caracter a ser usado como separador no split</param> /// <returns>Array preenchido com valores do tipo string de acordo com a Quantidade de separadores encontrados na string </returns> /// <remarks></remarks> /// <exemplo> /// /// string = "text1/text2/text3/text4/text5" onde o separador e o caracter "/" /// /// </exemplo> public static String[] arrayOfTextFile(string strFile, splitType splitCaracter) { try { string[] arrayFile = null; char splitCarac = (char)defineSplitType(splitCaracter); arrayFile = strFile.Split(splitCarac); return arrayFile; } catch(Exception ex) { throw ex; } }