2013-03-14 78 views
-4

我有這樣的文字解析文本使用LINQ

 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]))); 
     } 

我沒有得到改變第一個文本。

+2

也不清楚問題是什麼......或者確實爲什麼很多這裏的代碼是用逗號和零字符搞亂,因爲這似乎完全無關,你正在嘗試做的。你能澄清一下:這裏的間距是多少?空間對齊?或標籤?要麼...? – 2013-03-14 11:01:05

+4

看起來你忘了在文本中提問 – spender 2013-03-14 11:01:12

+0

我有一個數字序列,在數字錯過的地方我有一個空格。我必須將每個空格替換爲零。在每一行我有7個數字 – Mykhalik 2013-03-14 11:05:45

回答

1

我不明白爲什麼你甚至會不怕麻煩來解析浮動。

它看起來像你只有一行項目(可能或可能不是浮動),你必須完成行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(); 
     } 
0

我用兩個輔助功能

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('.', ','); 
     }