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);
我真的不能说为什么你的方法不起作用。我已经尝试发送请求,但收到长度为5的字符串响应内容长度:7。它看起来像有一个BOM或类似的东西,它从流逐行读取时会产生一些问题。
我可以用这两种方法中的任何一种来做。
-
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;