繁体   English   中英

如何读取以空列分隔的文本文件

[英]How to read a space-delimited text file with empty columns

我正在尝试使用StreamReader读取以空格分隔的文件。

为此,我逐行读取文件,将它们分成数组,并通过提供索引读取特定数据。

问题是当某些行中的列为空时。 这导致程序到达错误的项目。

col1       col2      col3
a             b           c
d                         e
f             g           h

例如,第二行出现问题。

除非您有固定宽度的列,否则您将不知道哪个值应该为空,如果您控制格式,则应将值用引号引起来,或者将CSV格式的值用引号引起来,将值进行换行,将内引号括起来,然后就可以的看法,如果在excel :-)是免费的。

https://zh.wikipedia.org/wiki/逗号分隔的值

我可以看到两种方法。

  1. 使用确切的宽度/间距查找元素在行内的位置

  2. 如果元素少于三个,则分析每行内部的元素位置。 将每个元素的x位置与标题的x位置进行比较,例如:

      string header = "col1 col2 col3"; string row1 = "adfgdgdfg c"; int[] headerPoss = { header.IndexOf("col1"), header.IndexOf("col2"), header.IndexOf("col3") }; string[] row1Elements = row1.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); int[] rowElementsPos = new int[row1Elements.Length]; for (int i = 0; i < row1Elements.Length; i++) rowElementsPos[i] = row1.IndexOf(row1Elements[i]); for (int i = 0; i < row1Elements.Length; i++) { Console.WriteLine("This element is from column {0}", headerPoss.Min(hp => Math.Abs(hp - rowElementsPos[i])) + 1); } Console.ReadKey(); 

输出:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM