[英]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 :-)是免费的。
我可以看到两种方法。
使用确切的宽度/间距查找元素在行内的位置
如果元素少于三个,则分析每行内部的元素位置。 将每个元素的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.