C#解析数据并将其放入正确的数据类型
我目前正在尝试从一个文件中读取数据,并将数据放入数据的正确位置。然而,我发现在C语言中解析字符串比C++更困难。我正在阅读的文件中的一个示例如下: CGI控股公司厚度2.15 0.01 0.47-64.17 6.25 1.92 23.78 转换为以下数据类型C#解析数据并将其放入正确的数据类型,c#,regex,C#,Regex,我目前正在尝试从一个文件中读取数据,并将数据放入数据的正确位置。然而,我发现在C语言中解析字符串比C++更困难。我正在阅读的文件中的一个示例如下: CGI控股公司厚度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 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控股公司”
股票代码=“厚度”
当前价格=2.15等
但是,我不知道如何正确解析数据。我曾尝试使用正则表达式,但名称中可能包含不同数量的单词,需要从代码中对其进行分类
Ex:CHICAGO MERCANTILE Ex HD CME 301.13 23.53 8.48 31.67 315.00 132.57 35.73
任何能为我指明正确方向的想法都将不胜感激我为您创建了一个简单的程序,这可能不是最好的方式,但我认为它会带您到达目的地
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();
string input=“CGI控股公司厚度2.15 0.01 0.47-64.17 6.25 1.92 23.78”;
List inputSplit=input.Split(“”).ToList();
PE_比率=转换为小数(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];
对于(int i=0;i
如果您想使用正则表达式,可以使用:
(.+)(\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})
匹配三个字符的“股票代码”
(.+)
匹配所有其他字符:示例中的公司名称。是否可以用逗号(,)或其他字符分隔每个值?不,它们是原样。否则,我可以只拆分逗号(,)上的字符串。我认为从右到左读取正则表达式可能是我最好的选择。如果要解析的字段数是固定的,并且输入中没有可选字段,则可以从字符串末尾向后传递。解析7位小数后,下一位是ticker symbol,其余的是name。ticker symbol“THK”是静态单词吗?这里的空格不是分隔符吗?