使用linq解析文本

本文关键字:文本 linq 使用 | 更新日期: 2023-09-27 18:03:57

我有这样的文本

      5       1     .021   -56.6   -5      0.4    -5      0.    
   -.05     -.1     .05     -.1     .05      .1    -.05      .1       
   YESA      1.                                                       
  .8507  .84993

,我必须得到

      5       1     .021   -56.6   -5      0.4   -5      0.    
   -.05     -.1     .05     -.1     .05      .1    -.05      .1       
   YESA      1.     0.       0.      0.      0.      0.      0.               
  .8507  .84993     0.       0.      0.      0.      0.      0. 

但是当我使用下一个结构

   FileStream fs = new FileStream(fileName, FileMode.Open);
            StreamReader sr = new StreamReader(fs);
         while (!sr.EndOfStream)
        {
            string line = sr.ReadLine();
            string temp = System.Text.RegularExpressions.Regex.Replace(line, @"'s+", " ");
            string[] vector = temp.Split(' ');
            for (int i = 0; i < vector.Length; i++)
                Console.WriteLine(ConvertToFloat(ConvertString(vector[i])));
        }

使用linq解析文本

我不明白你为什么要费心去解析浮点数。

看起来你只有几行项目(可能是浮点数,也可能不是浮点数),你必须完成这8行项目。像

        foreach (string line in lines)
        {
            var words = line.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            foreach(string w in words)
                Console.Write("{0,6}", w);
            // filling out
            for (int i = words.Length; i < 8; i++)
                Console.Write("{0,6}", "0.");
            Console.WriteLine();
        }

我使用了两个辅助函数

private float ConvertToFloat(string line)//to check integer or float number
        {
            string temp = "";
            if (line[line.Length - 1] == ',' || line[0] == ',')
            {
                temp = line.Replace(',', ''0');
                return float.Parse(temp);
            }
            else
                return float.Parse(line);
        }
        private string ConvertString(string line)//change '.' to ','
        {
            return line.Replace('.', ',');
        }