2014-03-01 10 views
-2

雙打我確實有這樣形成一個字符串:解析所有的字符串中的C#

{ Desc = Marketcap, Val = 
    1,270.10 BTC 
    706,709.04 USD 
    508,040.00 EUR 
    4,381,184.55 CNY 
    425,238.14 GBP 
    627,638.19 CHF 
    785,601.09 CAD 
    72,442,058.40 JPY 
    787,357.97 AUD 
    7,732,676.06 ZAR 
} 

我需要它來解析出所有的雙打,而我竟堅持了這一點。我該怎麼做?

編輯:我實際上知道有多少數字我要解析,這是固定的,就像在該字符串(這只是數量的變化)。我不需要的符號,既沒有(像BTC,美元等)

+0

解析它以提取'Val ='之後和'}'之前的文本,然後將它們分隔爲數組。既然你知道這個格式,你所有的數字都將在偶數條目中('[0],[2],[4]')和奇數條目中的貨幣類型('[1],[3],[5 ]') –

+0

你嘗試了什麼? –

+0

你面臨的問題是什麼?你的方法是什麼? – F11

回答

1

如果你的數據實際上是這樣的:

var data = new 
{ 
    Desc = "Marketcap", 
    Val = @"1,270.10 BTC 
706,709.04 USD 
508,040.00 EUR 
4,381,184.55 CNY 
425,238.14 GBP 
627,638.19 CHF 
785,601.09 CAD 
72,442,058.40 JPY 
787,357.97 AUD 
7,732,676.06 ZAR", 
}; 

(因爲你在你的問題有不清楚)

然後,你可以這樣做:

var query = 
    from d in data.Val 
     .Split(
      Environment.NewLine.ToCharArray(), 
      StringSplitOptions.RemoveEmptyEntries) 
    select decimal.Parse(
     d.Split(' ')[0], 
     System.Globalization.CultureInfo.GetCultureInfo("en-au")); 

decimal[] array = query.ToArray(); 

這就給了你:

Array of Decimals

而且,你要分析此爲Decimal,不Double,爲Decimal是精確的財務計算和Double可能會導致舍入誤差。

+0

我會明確指定'CultureInfo',給定逗號和點... –

+0

我其實認爲Decimal並寫了Double :) –

+0

嗯,我的要求實際上是如何將所有這些Decimals轉換爲小數數組,聲明像這一個:decimal [] array = new decimal [] {}; –

1

這使用正則表達式來匹配以數字開頭,包含逗號或句點並以數字結尾的文本塊。似乎爲我工作就好了。

根據您的需要,您可以使用doubleDecimal

[TestClass] 
public class UnitTests 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     string str = 
      @"{ Desc = Marketcap, Val = 1,270.10 BTC 706,709.04 USD 508,040.00 EUR 4,381,184.55 CNY 425,238.14 GBP 627,638.19 CHF 785,601.09 CAD 72,442,058.40 JPY 787,357.97 AUD 7,732,676.06 ZAR }"; 
     MatchCollection matches = Regex.Matches(str, @"\d[\d,\.]+\d"); 
     double[] values = (from Match m in matches select double.Parse(m.Value)).ToArray(); 
     Assert.AreEqual(10,values.Length); 
     Assert.AreEqual(1270.10,values[0]); 
    } 
}