[英]C# Parse data and put into correct data type
我目前正在嘗試從文件中讀取數據,並將數據放入數據中的正確位置。 但是我發現在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”
股票代號=“ THK”
當前價格= 2.15等
但是我不知道如何正確解析數據。 我曾嘗試使用正則表達式,但“名稱”中可以包含不同數量的單詞,因此需要從代碼列表中區分出來。
例如:芝加哥商品交易所EX 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();
如果您想使用正則表達式,可以使用:
(.+)(\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})
匹配三個字符的“ ticker符號”。
(.+)
匹配所有其他名稱:您的示例中的公司名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.