簡體   English   中英

C#解析數據並放入正確的數據類型

[英]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})

這將對您的示例進行匹配和分組。 公司名稱將包含一個尾隨空格,而“數字組”將具有一個前導空格,但是在您的代碼中消除它應該不是問題。

regex101演示

從右到左的解釋:

((?:\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM