2013-03-26 7 views
2

У меня есть такой текстАнализировать текст и сохранить в памяти с #

5  1  5  1  5  1  5  1  
     1 

Я должен получить

5  1  5  1  5  1  5  1  
0  1  0  0  0  0  0  0 

и сохранить его в памяти. Но когда я использую такую ​​сборку:

List<string> lines=File.ReadLines(fileName); 
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(); 
     } 

Я печатаю только текст в нужном формате на дисплее. Как я могу сохранить его в List<string> newLines?

+0

Итак, вы хотите сохранить свой вывод так, как он есть в списке в виде строки? – Shaharyar

+4

Если вы 'RemoveEmptyEntries', как вы могли когда-либо узнать, какая позиция' 1' на второй строке? Честно говоря, для разбора этого я просто не думаю, что «Сплит» - это правильный вариант. –

+0

. Я не ставил как ответ, не уверен, что его то, что вы хотите, но вместо этого (или так же как) 'Console.Write', вы можете используйте 'newLines.Add (string)' – Sayse

ответ

2

Если мы предполагаем, что данные предназначены для быть равномерно распределены (как это было предложено текущее Write и т.д., то я бы его обработать, как символов:

char[] chars = new char[49]; 
foreach(string line in File.ReadLines(path)) 
{ 
    // copy in the data and pad with spaces 
    line.CopyTo(0, chars, 0, Math.Min(line.Length,chars.Length)); 
    for (int i = line.Length; i < chars.Length; i++) 
     chars[i] = ' '; 
    // check every 6th character - if space replace with zero 
    for (int i = 1; i < chars.Length; i += 6) if (chars[i] == ' ') 
     chars[i] = '0'; 
    Console.WriteLine(chars); 
} 

Или, если вам действительно нужно, как линии, использовать (в конце каждой итерации цикла):.

list.Add(new string(chars)); 
0

Я предполагаю, что есть ровно 5 пространство между номерами Так вот код:

List<string> lines = System.IO.File.ReadLines(fileName).ToList(); 
List<string> output = new List<string>(); 

foreach (string line in lines) 
{ 
    var words = 
     line.Split(new string[] { new string(' ', 5) }, 
        StringSplitOptions.None).Select(input => input.Trim()).ToArray(); 

    Array.Resize(ref words, 8); 

    words = words.Select(
       input => string.IsNullOrEmpty(input) ? " " : input).ToArray(); 

    output.Add(string.Join(new string(' ', 5), words)); 
} 

//output: 
// 5  1  5  1  5  1  5  1  
// 0  1  0  0  0  0  0  0 
0

Вы можете использовать этот код для получения нужного результата:

StreamReader sr = new StreamReader("test.txt"); 
      string s; 
      string resultText = ""; 
      while ((s = sr.ReadLine()) != null) 
      { 
       string text = s; 
       string[] splitedText = text.Split('\t'); 
       for (int i = 0; i < splitedText.Length; i++) 
       { 
        if (splitedText[i] == "") 
        { 
         resultText += "0 \t"; 
        } 
        else 
        { 
         resultText += splitedText[i] + " \t"; 
        } 
       } 
       resultText += "\n"; 
      } 
      Console.WriteLine(resultText); 

«test.txt» является текстовым файлом, который содержит текст и «resultText» переменный содержит результат, который вы хотите.

Смежные вопросы