【发布时间】:2014-06-23 16:46:09
【问题描述】:
我正在导入一个 csv 文件,其中有 10 列。其中有布尔列,可能是(1 , true ,false, 0)。
我正在读取 csv 文件并创建一个数据表,除了布尔值字段外,一切正常,它总是返回 false。
以下代码用于从 csv 创建数据表。
public static DataTable GetDataTable(bool firstRowColumnName, string path)
{
StreamReader sr = new StreamReader(path);
string line = null;
DataTable dtResult = new DataTable();
if (firstRowColumnName)
{
line = sr.ReadLine();
string[] headers = line.Split(',');
for (int i = 0; i < headers.Length; i++)
{
dtResult.Columns.Add(headers[i]);
}
}
while ((line = sr.ReadLine()) != null)
{
if (line.Trim() != string.Empty)
{
string[] lineData = line.Split(',');
if (dtResult.Columns.Count == 0)
{
for (int i = 0; i < lineData.Length; i++)
{
dtResult.Columns.Add("Column" + i.ToString());
}
}
DataRow drNew = dtResult.NewRow();
for (int i = 0; i < lineData.Length; i++)
{
drNew[i] = lineData[i];
}
dtResult.Rows.Add(drNew);
}
}
return dtResult;
}
下面是我正在读取数据表的代码。
machine is an object of a class.
machine.IsLaptop = dt.Rows[i]["Laptop"].ToString() == "1" || dt.Rows[i]["Laptop"].ToString().ToLower() == "true";
请说明为什么这个值总是假的。
【问题讨论】:
-
你确定它带回 1 还是真的?因为你的逻辑就在那里
-
-
可能与您使用的 CSV 文件的编码有关。请检查使用了哪种编码。
-
您能否在第一个读取“行”被拆分之前获取其内容的副本,然后进入 CSV 并获取其第一个数据行的副本,然后将两者都发布?这将有助于了解您所看到的实际值。
-
在进行字符串比较时尝试使用 .Trim()。让我很头疼...