代码之家  ›  专栏  ›  技术社区  ›  Graviton

用空格分析文本行

c#
  •  2
  • Graviton  · 技术社区  · 14 年前

      .640      .070     -.390     -.740    -1.030    -1.410    -1.780    -1.840
    -1.360     -.360      .860     1.880     2.340     2.250     1.950     1.710
     1.410      .700     -.300     -.840     -.280     1.020     1.860     1.460
      .310     -.460     -.320      .350     1.020     1.650     2.430     3.070
     2.840     1.440     -.460    -1.650    -1.520     -.520      .250      .190
     -.420     -.870     -.800     -.280      .570     1.660     2.500     2.220
      .520    -1.560    -2.530    -2.030    -1.200    -1.060    -1.230     -.600
      .990     2.300     2.180      .940     -.090     -.140      .320      .470
      .330      .420      .830     1.080     1.090     1.530     2.740     3.800
     3.410     1.610     -.150     -.900    -1.120    -1.640    -2.140    -1.590
      .210     2.210     3.290     3.170     2.380     1.880     2.530     4.210
     5.280     3.820     -.040    -3.670    -4.190    -1.260     2.930     5.740
     5.980     3.920      .540    -2.890    -5.010    -4.780    -2.150     1.640
     4.670     5.540     4.230     1.950      .120     -.470     -.010      .340
     -.710    -2.940    -4.070    -1.810     3.000     6.590     6.140     2.750
     -.490    -2.460    -4.180    -5.660    -4.800     -.560     4.510     6.630
     5.140     2.860     2.230     2.510     1.670     -.440    -2.030    -2.330
    

    请注意,在一个值和另一个值之间有许多白色字符。

    我试着读每一行,然后把每一行按字母顺序分开 ' ' 性格。我的代码是这样的:

        public List<double> Parse(StreamReader sr)
        {
            var dataList = new List<double>();
    
            while (sr.Peek() >= 0)
            {
    
                string line = sr.ReadLine();
                if (lineCount > 1)
                {
    
                    string[] columns = line.Split(' ');
                    for (var j = 0; j < columns.Length; j++)
                    {
    
                        dataList.Add(double.Parse(columns[j]) ));
                    }
                }
    
    
            }
            return dataList ;
        }
    

    上述代码的问题是,它只能处理值由单个白色字符分隔的情况。

    你知道吗?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Jon Skeet    14 年前

    最简单的方法可能是使用 String.Split StringSplitOptions StringSplitOptions.RemoveEmptyEntries .

    ReadLine 直到返回null,而不是使用 TextReader.Peek

        2
  •  1
  •   Hans Olsson    14 年前

    执行拆分之前,请将所有多个空间替换为单个空间,例如:

    line = System.Text.RegularExpressions.Regex.Replace(line, @"  +", @" ");
    
        3
  •  0
  •   user434909    14 年前

    您可以使用简单的单行代码。让您的文本位于名为input的字符串中。

    string[] values = System.Text.RegularExpressions.Regex.Split(input, @"\s+");
    

    您只需简单地获取字符串数组中的所有值