我正在尝试使用StreamReader
读取以空格分隔的文件。
为此,我逐行读取文件,将它们分成数组并通过提供索引读取特定数据。
问题是在某些行中列是空的。这会导致程序到达错误的项目。
col1 col2 col3
a b c
d e
f g h
例如,我遇到了第二行的问题。
答案 0 :(得分:1)
除非您有固定的宽度列,否则您不知道哪个值应为空,如果您可以控制格式,则应将值包装在引号中,或者使用带有引号的CSV格式进行值换行,然后使用内部引号,则可以如果在excel :-)免费获得观点的奢侈。
答案 1 :(得分:1)
我可以看到两种方法。
使用精确的宽度/空格来查找行内的元素定位
如果元素少于三个,则分析每行内的元素位置。将每个元素的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();
输出: