我目前正在尝试从文件读入并将数据放入数据中的正确位置。但是我发现在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
任何能够指出我正确方向的想法都会受到赞赏
答案 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})
这会对您的示例进行匹配和分组。公司名称将具有尾随空格,并且“数字组”将具有前导空格,但在代码中消除此问题应该不是问题。
解释,从右到左:
((?:\s\-?\d{1,3}\.\d{2}){7})
匹配(非捕获)组(?:\s\-?\d{1,3}\.\d{2})
的七倍,而这又匹配:空格(\s
)后跟可选的短划线(\-?
),后跟一个三个数字(\d{1,3}
)后跟一个点(\.
),后跟两个数字(\d{2}
)。所以这与你输入结尾的七个数字相匹配。
(\w{3})
匹配三个字符的'股票代码'。
(.+)
匹配所有其余内容:示例中的公司名称。