如何在行-C中拆分多个间隔数字#

时间:2013-09-27 17:03:17

标签: c# split whitespace delimiter

我想读逐行中用红线加下划线的每一列。您可以看到的列值由几个空格分隔。例如,从第一行开始我只想读“1”然后“MANDIT”然后“CLIENT”等。问题是值之间的间隔不是恒定的。

enter image description here

这是我的代码:(有明显的语法问题)

  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)有效吗?我在数据中加倍并且不仅仅是字符串

谢谢你们

4 个答案:

答案 0 :(得分:3)

仔细查看您的图像,很明显您有一个固定长度列的文件 最好的方法应该是为每个要求的列提供一系列长度和位置。 然后读取该行并使用Substring方法提取每一列。

例如,假设您只对从pos数组指示的位置开始并且len数组指示的长度

的4列感兴趣
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或空项,将是从左到右的顺序列值。