![](/img/trans.png)
[英]Convert a single DataRow (with strings and ints) into a List<string> c#
[英]Convert strings in DataRow to double
我正在從網上讀取一個csv文件,並將其轉換為DataTable。 第一列是一個字符串。 第二,第三和第四列是數字。 我想將第二,第三和第四列轉換為兩倍。 我已經編寫了下面的方法來執行此任務。 但是,當我執行“ Convert.ToDouble”轉換並將其存儲回數據行時,似乎將其保留為字符串對象。
public static DataTable ConvertCSVtoDataTable(string strFilePath)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strFilePath);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string[] headers = sr.ReadLine().Split(',');
DataTable dt = new DataTable();
foreach (string header in headers)
{
dt.Columns.Add(header);
}
while (!sr.EndOfStream)
{
string[] rows = sr.ReadLine().Split(',');
DataRow dr = dt.NewRow();
for (int i = 0; i < headers.Length; i++)
{
switch (i)
{
//Convert columns 1,2, and 3 to double
case 1:
dr[i] = Convert.ToDouble(rows[i]);
break;
case 2:
dr[i] = Convert.ToDouble(rows[i]);
break;
case 3:
dr[i] = Convert.ToDouble(rows[i]);
break;
default:
dr[i] = rows[i];
break;
}
}
dt.Rows.Add(dr);
}
return dt;
}
添加列時需要指定列類型。 將創建列的代碼更改為如下所示(基於您要輸入double
列):
foreach (string header in headers.Take(3))
{
dt.Columns.Add(header, typeof(double));
}
foreach (string header in headers.Skip(3))
{
dt.Columns.Add(header, typeof(string));
}
此代碼將創建類型為double
前三列,其余類型為string
的列。
從此MSDN參考引用 :
默認情況下,新列的數據類型為字符串
如果您未指定類型,則將獲得默認類型為string
。
替換foreach
循環
for (int i = 0; i < headers.Length; i++)
{
if (i >= 1 && i <= 3)
dt.Columns.Add(headers[i], typeof(double));
else
dt.Columns.Add(headers[i]);
}
代替:
foreach (string header in headers)
{
dt.Columns.Add(header);
}
采用
for (int i = 0; i < headers.Count(); i++ )
{
switch (i)
{
case 1: case 2: case 3:
dt.Columns.Add(headers[i], typeof(double));
break;
default:
dt.Columns.Add(headers[i], typeof(string));
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.