我想读逐行中用红线加下划线的每一列。您可以看到的列值由几个空格分隔。例如,从第一行开始我只想读“1”然后“MANDIT”然后“CLIENT”等。问题是值之间的间隔不是恒定的。
这是我的代码:(有明显的语法问题)
StreamReader myReader = new StreamReader(Path)
String line = “ “;
for (int i =0; i <15; i++)
{
line = myReader.readLine();
string[] delimiters = new string[] { ‘ ’,‘ ’,‘ ’,‘ ’ };
// Accomodating for different sizes of spaces - is this right?
int[] columnValues = line.Split(delimiters)
}
“stringt [] columnValues = line.Split(delimteres)有效吗?我在数据中加倍并且不仅仅是字符串
谢谢你们
答案 0 :(得分:3)
仔细查看您的图像,很明显您有一个固定长度列的文件 最好的方法应该是为每个要求的列提供一系列长度和位置。 然后读取该行并使用Substring方法提取每一列。
例如,假设您只对从pos
数组指示的位置开始并且len
数组指示的长度
int pos[] = new int[] {0, 50, 100, 150};
int len[] = new int[] {3, 40, 20, 15};
....
string[] values = new string[4];
string line;
while((line = myReader.ReadLine()) != null)
{
values[0] = line.Substring(pos[0], len[0]);
values[1] = line.Substring(pos[1], len[1]);
values[2] = line.Substring(pos[2], len[2]);
values[3] = line.Substring(pos[3], len[3]);
.... now convert the values and store or use them ....
}
答案 1 :(得分:2)
我认为这很难,因为你的字段中可能有空格:'公司代码'。因此,除非列之间有'\ t'标签,并且您的字段不能包含制表符,否则您可能找不到合适的分隔符。
如果您的第三列永远不会有#s而您的第四列将始终以#开头,那么您可以阅读,直到找到一个数字并修剪两端的空白区域。
备选方案:
如果您偶然从其他程序获取此输出,则可以使用C#&amp; powershell将它的输出传递给你的程序,然后管道机制将处理为你分割列,你将收到一个对象列表,其中每个对象都是指定的行。
或者,您要阅读的文件看起来可能是csv。你可以有任何程序输出,而不是输出为csv?如果是,那么你就有了分隔符。
答案 2 :(得分:0)
我遇到了类似的问题并得到了以这种方式解决问题的建议:
StreamReader myReader = new StreamReader(Path)
String line = “ “;
for (int i =0; i <15; i++)
{
line = myReader.ReadLine();
char[] delimiters = new char[] {' ', '\t'};
string[] columnValues = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
}
答案 3 :(得分:-1)
仅根据空间分割线。
string[] Read = line.Split(' ');
您将获得一个字符串数组。对于此字符串数组中的每个非null或空项,将是从左到右的顺序列值。