Пример #1
0
    public static List <(String MoneyAmount, String MoneyCurrency)> SeekMoney(string OrgString)
    {
        OrgString = OrgString.Replace(" ", String.Empty);

        OrgString = OrgString.Replace("〇", "0");
        OrgString = OrgString.Replace("○", "0");    //本次HTML的特殊处理
        OrgString = OrgString.Replace("一", "1");
        OrgString = OrgString.Replace("二", "2");
        OrgString = OrgString.Replace("三", "3");
        OrgString = OrgString.Replace("四", "4");
        OrgString = OrgString.Replace("五", "5");
        OrgString = OrgString.Replace("六", "6");
        OrgString = OrgString.Replace("七", "7");
        OrgString = OrgString.Replace("八", "8");
        OrgString = OrgString.Replace("九", "9");
        OrgString = OrgString.Replace("十", "10");

        OrgString = OrgString.Replace("0", "0");    //本次HTML的特殊处理
        OrgString = OrgString.Replace("1", "1");
        OrgString = OrgString.Replace("2", "2");
        OrgString = OrgString.Replace("3", "3");
        OrgString = OrgString.Replace("4", "4");
        OrgString = OrgString.Replace("5", "5");
        OrgString = OrgString.Replace("6", "6");
        OrgString = OrgString.Replace("7", "7");
        OrgString = OrgString.Replace("8", "8");
        OrgString = OrgString.Replace("9", "9");

        var MoneyList    = new List <(String MoneyAmount, String MoneyCurrency)>();
        var LastIndex    = 0;
        var detectString = OrgString;

        while (true)
        {
            bool IsCurrencyMark = false;
            detectString = detectString.Substring(LastIndex);
            var MoneyCurrency = String.Empty;
            //可能同时存在多个关键字,这里选择最前面一个关键字
            var MinIdx = -1;
            foreach (var Currency in CurrencyList)
            {
                if (detectString.IndexOf(Currency) != -1)
                {
                    if (MinIdx == -1)
                    {
                        MoneyCurrency = Currency;
                        MinIdx        = detectString.IndexOf(Currency);
                    }
                    else
                    {
                        if (MinIdx > detectString.IndexOf(Currency))
                        {
                            MoneyCurrency = Currency;
                            MinIdx        = detectString.IndexOf(Currency);
                        }
                    }
                }
            }
            if (MoneyCurrency == String.Empty)
            {
                if (detectString.Contains("¥"))
                {
                    IsCurrencyMark = true;
                    MoneyCurrency  = "人民币";
                    int currencyMarkIdx = detectString.IndexOf("¥");
                    for (int k = currencyMarkIdx + 1; k < detectString.Length; k++)
                    {
                        var s = detectString.Substring(k, 1);
                        if (RegularTool.IsNumeric(s) || s == ",")
                        {
                            if (k == detectString.Length - 1)
                            {
                                LastIndex = k;
                                break;
                            }
                            continue;
                        }
                        LastIndex = k;
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            else
            {
                LastIndex = detectString.IndexOf(MoneyCurrency);
            }
            Regex rex         = new Regex(@"^\d+");
            var   MoneyAmount = String.Empty;
            for (int i = LastIndex - 1; i >= 0; i--)
            {
                var SingleChar = detectString.Substring(i, 1);
                //惩 本次特殊处理
                if (SingleChar == "." || SingleChar == "," ||
                    SingleChar == "," || SingleChar == "万" ||
                    SingleChar == "惩" || SingleChar == "亿" || rex.IsMatch(SingleChar))
                {
                    MoneyAmount = SingleChar + MoneyAmount;
                    continue;
                }
                else
                {
                    MoneyAmount = String.Empty;
                    if (LastIndex == i + 1)
                    {
                        break;
                    }
                    MoneyAmount = detectString.Substring(i + 1, LastIndex - i - 1);
                    MoneyAmount = Normalizer.NormalizeNumberResult(MoneyAmount);
                    if (!rex.IsMatch(MoneyAmount))
                    {
                        MoneyAmount = String.Empty;
                        break;  //暂时认为一定要有阿拉伯数字
                    }
                    MoneyList.Add((MoneyAmount, MoneyCurrency));
                    MoneyAmount = String.Empty;
                    break;
                }
            }
            if (MoneyAmount != String.Empty)
            {
                MoneyList.Add((MoneyAmount, MoneyCurrency));
            }
            if (!IsCurrencyMark)
            {
                LastIndex += MoneyCurrency.Length;
            }
            else
            {
                //"¥"在字符串末尾的时候,如果不及时退出,会发生死循环!
                if (MoneyAmount == String.Empty)
                {
                    break;
                }
            }
        }
        return(MoneyList);
    }
Пример #2
0
    List <struHoldAfter> GetHolderAfter2ndStep()
    {
        var HoldList = new List <struHoldAfter>();
        var keyword  = new string[] { "增持后持股", "减持后持股" };

        foreach (var table in root.TableList)
        {
            var HeaderRowNo = -1;
            var mt          = new HTMLTable(table.Value);
            for (int RowCount = 1; RowCount <= mt.RowCount; RowCount++)
            {
                for (int ColumnCount = 1; ColumnCount < mt.ColumnCount; ColumnCount++)
                {
                    var value = mt.CellValue(RowCount, ColumnCount);
                    foreach (var key in keyword)
                    {
                        if (value.Contains(key))
                        {
                            HeaderRowNo = RowCount;
                            break;
                        }
                    }
                    if (HeaderRowNo != -1)
                    {
                        break;
                    }
                }
                if (HeaderRowNo != -1)
                {
                    break;
                }
            }
            if (HeaderRowNo != -1)
            {
                //如果有5格
                if (mt.ColumnCount != 5)
                {
                    continue;
                }
                int PercentCol = -1;
                for (int rowno = HeaderRowNo + 1; rowno <= mt.RowCount; rowno++)
                {
                    var value1 = mt.CellValue(rowno, 1);

                    var Title4 = mt.CellValue(HeaderRowNo, 4);
                    var value4 = mt.CellValue(rowno, 4);
                    value4 = value4.Trim().Replace(",", String.Empty);
                    value4 = value4.Trim().Replace(",", String.Empty);

                    var Title5 = mt.CellValue(HeaderRowNo, 5).Replace(" ", "");
                    var value5 = mt.CellValue(rowno, 5);
                    value5 = value5.Trim().Replace(",", String.Empty);
                    value5 = value5.Trim().Replace(",", String.Empty);
                    if (Title5.Contains("增持后持股比例(%)") || Title5.Contains("减持后持股比例(%)"))
                    {
                        PercentCol = 5;
                        //Console.WriteLine(Title5);
                    }
                    if (PercentCol == 5 && !value5.Contains("%"))
                    {
                        value5 += "%";
                    }
                    if (RegularTool.IsNumeric(value4) && RegularTool.IsPercent(value5))
                    {
                        //Console.WriteLine("GetHolderAfter2ndStep:" + value1);
                        HoldList.Add(new struHoldAfter()
                        {
                            Name    = value1,
                            Count   = getAfterstock(Title4, value4),
                            Percent = getAfterpercent(value5),
                            Used    = false
                        });
                        continue;
                    }
                }
            }
        }
        return(HoldList);
    }