【问题标题】:boolean value always coming false in csv import布尔值在 csv 导入中总是为假
【发布时间】: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()。让我很头疼...

标签: c# csv


【解决方案1】:

由于您使用的是字符串值,因此读取的值可能是“true”,包括空格。

【讨论】:

    【解决方案2】:

    尝试使用Convert.ToBoolean 和/或Convert.ToInt32 来转换您的价值观。

    http://msdn.microsoft.com/en-us/library/system.convert.toboolean%28v=vs.110%29.aspx

    您可能需要一些逻辑来处理没有得到Boolean.TrueStringBoolean.FalseString 的情况。在这种情况下你可以Boolean.TryParse

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多