c#分离WebRequest CSV列到数组中

本文关键字:数组 CSV 分离 WebRequest | 更新日期: 2023-09-27 17:50:47

我想创建一个包含给定股票价格的数组。

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()由于某种原因没有返回任何东西,我在

处得到System.FormatException
dCurrentPrice[iLine] = double.Parse(sr.ReadLine(), System.Globalization.CultureInfo.InvariantCulture); 

c#分离WebRequest CSV列到数组中

我真的不能说为什么你的方法不起作用。我已经尝试发送请求,但收到长度为5的字符串响应内容长度:7。它看起来像有一个BOM或类似的东西,它从流逐行读取时会产生一些问题。

我可以用这两种方法中的任何一种来做。

  1. StreamReader ReadToEnd ()

    string csvContent = sr.ReadToEnd();
    

然后解析这个。它看起来更安全,更方便。看起来没有必要逐行阅读响应。

  • 或者如果您确定响应是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;