C#解析数据并输入正确的数据类型

时间:2015-02-11 10:19:46

标签: c# regex

我目前正在尝试从文件读入并将数据放入数据中的正确位置。但是我发现在C#中解析字符串要比c ++困难得多。我正在阅读的文件中的示例如下:

CGI HOLDING CORP THK 2.15 0.01 0.47 -64.17 6.25 1.92 23.78

进入以下数据类型

public class StockInfo
    {
        public string Company { get; set; }
        public string TickerSymbol { get; set; }
        public decimal CurrentPrice { get; set; }
        public decimal PriceChange { get; set; }
        public decimal PercentChange { get; set; }
        public decimal YTDChange { get; set; }
        public decimal FiftyTwoWeekHigh { get; set; }
        public decimal FiftyTwoWeekLow { get; set; }
        public decimal PE_Ratio { get; set; }
    }

所以公司会=" CGI HOLDING CORP"

Ticker Symbol =" THK"

当前价格= 2.15等......

但是,我无法弄清楚如何正确解析数据。我尝试过使用正则表达式,但名称中可能包含不同数量的单词,需要从自动收录器中进行操作。

Ex:CHICAGO MERCANTILE EX HD CME 301.13 23.53 8.48 31.67 315.00 132.57 35.73

任何能够指出我正确方向的想法都会受到赞赏

2 个答案:

答案 0 :(得分:1)

我为您创建了一个简单的程序,它可能不是最好的方式,但我认为它会带您到达目的地。

  string input = "CGI HOLDING CORP THK 2.15 0.01 0.47 -64.17 6.25 1.92 23.78";
  List<string> inputSplit = input.Split(' ').ToList();

  PE_Ratio = Convert.ToDecimal(inputSplit[inputSplit.Count-1]);
  FiftyTwoWeekLow = Convert.ToDecimal(inputSplit[inputSplit.Count - 2]);
  FiftyTwoWeekHigh = Convert.ToDecimal(inputSplit[inputSplit.Count - 3]);
  YTDChange = Convert.ToDecimal(inputSplit[inputSplit.Count - 4]);
  PercentChange = Convert.ToDecimal(inputSplit[inputSplit.Count - 5]);
  PriceChange = Convert.ToDecimal(inputSplit[inputSplit.Count - 6]);
  CurrentPrice = Convert.ToDecimal(inputSplit[inputSplit.Count - 7]);
  TickerSymbol = inputSplit[inputSplit.Count - 8];

  for (int i = 0; i < inputSplit.Count - 8; i++)
  {
    Company = Company + (inputSplit[i] + " ");
  }

  Company = Company.Trim();

答案 1 :(得分:1)

如果您想购买正则表达式,可以使用:

(.+)(\w{3})((?:\s\-?\d{1,3}\.\d{2}){7})

这会对您的示例进行匹配和分组。公司名称将具有尾随空格,并且“数字组”将具有前导空格,但在代码中消除此问题应该不是问题。

regex101 Demo

解释,从右到左:

((?:\s\-?\d{1,3}\.\d{2}){7})

匹配(非捕获)组(?:\s\-?\d{1,3}\.\d{2})的七倍,而这又匹配:空格(\s)后跟可选的短划线(\-?),后跟一个三个数字(\d{1,3})后跟一个点(\.),后跟两个数字(\d{2})。所以这与你输入结尾的七个数字相匹配。

(\w{3})

匹配三个字符的'股票代码'。

(.+)

匹配所有其余内容:示例中的公司名称。