2015-05-26 91 views
0

我想創建一個包含給定股票價格的數組。C#將WebRequest CSV列分隔成數組

iStockTableRows是股票的數量,例如「3」。

sSymbols包含股票名稱「AAPL + GOOG + MSFT」。

"http://finance.yahoo.com/d/quotes.csv?s=" + sSymbols + "&f=a"是股票分成多行的價格。

WebRequest wrPrice = WebRequest.Create("http://finance.yahoo.com/d/quotes.csv?s=" + sSymbols + "&f=a"); //sSymbols zb. "AAPL+GOOG+MSFT" 
WebResponse wResp = wrPrice.GetResponse(); 

StreamReader sr = new StreamReader(wResp.GetResponseStream()); 
double[] dCurrentPrice = new double[iStockTableRows]; 
int iLine = 0; 

while (!sr.EndOfStream) 
{ 
     dCurrentPrice[iLine] = double.Parse(sr.ReadLine(), System.Globalization.CultureInfo.InvariantCulture); 
     iLine++; 
} 

sr.Close(); 

ReadLine()沒有出於某種原因返回任何東西,我在

dCurrentPrice[iLine] = double.Parse(sr.ReadLine(), System.Globalization.CultureInfo.InvariantCulture); 
因爲如此

得到System.FormatException

+0

這有什麼做與傳統的ASP。 – Paul

回答

0

我實際上無法說出爲什麼你的方法不起作用。 我已經嘗試發送一個請求,但收到的長度爲5的字符串的響應Content-Length:7。它看起來像是有一個BOM或類似的東西,這爲從一個流的逐行讀取產生了一些問題。

我會用這兩種方法中的任何一種來做到這一點。

  1. StreamReader的ReadToEnd的()

    string csvContent = sr.ReadToEnd(); 
    

,然後分析這一點。它看起來更安全和方便。 看起來好像沒有必要逐行讀取響應。

  1. 或者如果您確定響應是N浮點數,則使用TryParse。 這爲我工作:

    string[] names = new [] {"AAPL", "GOOG", "MSFT"}; 
    
    string url = String.Format("http://finance.yahoo.com/d/quotes.csv?s={0}&f=a", String.Join(",", names)); 
    WebRequest wrPrice = WebRequest.Create(url); 
    WebResponse wResp = wrPrice.GetResponse(); 
    StreamReader sr = new StreamReader(wResp.GetResponseStream()); 
    double[] dCurrentPrice = new double[names.Length]; 
    
    int iLine = 0; 
    while (!sr.EndOfStream) 
    { 
        double val; 
        if (double.TryParse(sr.ReadLine(), 
             System.Globalization.NumberStyles.AllowDecimalPoint, 
             System.Globalization.CultureInfo.InvariantCulture, 
             out val)) 
        { 
         dCurrentPrice[iLine++] = val; 
        } 
    } 
    sr.Close(); 
    
    Array.ForEach(dCurrentPrice, x => Console.WriteLine(x)); 
    
    return;