2013-03-14 3 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

остается неясным, что вопрос ... или действительно, почему много кода здесь Мессинг с запятыми и ноль-символов, так что, кажется, совершенно не связаны с тем, что вы пытаетесь сделать. Можете ли вы пояснить: что такое интервал здесь? пробелы для выравнивания? или вкладки? или...? –

+4

Кажется, вы забыли задать вопрос – spender

+0

в тексте У меня есть последовательность чисел, на месте, где номер пропущен, у меня есть пробел. И я должен поменять каждое пространство на ноль. В каждой строке у меня есть 7 номеров – Mykhalik

ответ

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('.', ','); 
     } 
Смежные вопросы