【问题标题】:C# - Tab Delimited String not working if column has empty characters/spacesC# - 如果列有空字符/空格,制表符分隔字符串不起作用
【发布时间】:2013-07-19 19:56:28
【问题描述】:

我在 .txt 文件中有以下文本:

hello     123     example info
mello     456     xample text
yello             maple syrup

我在做:

string FILENAME = Server.MapPath(".") + @"\example.txt";
string[] allLines = File.ReadAllLines(FILENAME);
string[] items = allLines[i].Split('\t');

现在,对于最后一行,我得到两个连续的空列,而不是跳过第二个 (items[1]) 并给我第三个。

我的最终结果如下:

hello     123     example info
mello     456     xample text
yello             

我实际上是在数据库中插入信息,但我不想详细说明,因为我知道问题出在拆分本身。

我的最终结果应该包括第三行中的第三列信息。

【问题讨论】:

  • 你确定最后一行的项目之间有制表符吗?
  • 我刚刚运行了代码,它正确地将行拆分为 3 个组件,第二个 (items[1]) 为空。
  • 我也对此进行了测试,并获得了像@Gjeltema 一样的好结果。您确定您正在处理的行具有您认为的值吗?
  • 是的,这只是一个例子,在这里我添加了额外的间距,而我实际处理的只是跳过它并按照我想要的方式工作。谢谢。
  • This overload of String.Split 可能对你有用。

标签: c# split csv


【解决方案1】:

只要空格使用制表符到达那里,您就可以用 '\t' 分割行。如果他们正确使用了标签,那么您最终应该得到您想要的。相反,如果他们使用了空格,那么您最终会在第一列中看到所有文本,只是很长。相反,你得到的,什么都不是。最可能的解决方案是实际上有额外的选项卡,输出数组比预期的要长,例如,第三列现在位于 items[3] 插槽中,而不是 items[2]。很难告诉您如何控制这一点,除了您可以测试 items[items.length-1] 而不是检查 items[2]。

【讨论】:

  • 是的,就是这样,额外的标签。谢谢泰德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多