2016-12-06 4 views
0

Я форматирую все текстовые строки в столбцы. Проблема в том, что я не знаю, как сделать так, чтобы каждая строка, которую я разделила на слова, начиналась с первой строки в тексте и чтобы все столбцы были разделены одним пробелом. Цените любую помощь. Мой код до сих пор:C# format line to column

using (StreamWriter writer = new StreamWriter(fvr)) 
{ 

    string[] lines = File.ReadAllLines(fv, Encoding.GetEncoding(1257)); 

    foreach (string line in lines) 
    { 
     var words = line.Split(skyrikliai2, StringSplitOptions.RemoveEmptyEntries); 
     for (int i = 0; i < words.Length; i++) 
      writer.WriteLine(words[i]); 
     writer.WriteLine("\n"); 
    } 
} 

результат этого будет (без символа):

  • слово
  • слово
  • слово
  • слово

и что Мне нужно, чтобы эта строка была разбита на слова, и каждое слово этой строки писать в новой строке, и все следующие строки будут написаны одинаково (тем самым я имею в виду формат всего, что в столбцах), если его легче представить в виде матрицы. Как так:

  • слово слово слово
  • слово слово слово
  • слово слово слово
  • слово слово слово

Edit3. Вот как я хочу выход посмотреть:

enter image description here

+0

Не могли бы вы предоставить * пример * исходных данных и * желаемый результат *? –

+0

отредактировал мой вопрос;) – Oscar

+0

Что делать, если у нас есть * разные слова? Например. 'a1 a2 \ r \ n b1 \ r \ n c1 c2 c3'? –

ответ

1

Уф, наконец-то ... Вы хотите шарнирных линий, например для тестового входа

a1, a2, a3 
b1 
c1; c2 

ожидаемый результат должен быть

a1 b1 c1 
a2 c2 
a3 

Вы можете реализовать Pivot следующим

private static List<List<String>> Pivot(String[][] source) { 
    var numRows = source.Max(a => a.Length); 
    var numCols = source[0].Length; 

    var result = new List<List<String>>(numRows); 

    for (int row = 0; row < numRows; ++row) { 
    List<String> line = Enumerable.Repeat("", numCols).ToList(); 

    result.Add(line); 

    for (int col = 0; col < numCols; ++col) 
     if (source[col].Length > row) 
     line[col] = source[col][row]; 
    } 

    return result; 
} 

И использовать string.Join получить

var result = Pivot(File 
    .ReadLines(@"C:\MyFile.txt", Encoding.GetEncoding(1257)) 
    .Select(line => line.Split(skyrikliai2, StringSplitOptions.RemoveEmptyEntries)) 
    .ToArray()); 

File.WriteAllLines(
    @"C:\OtherFile.txt", 
    result 
    .line => string.Join("\t", line), 
    Encoding.GetEncoding(1257)); 
+0

Дмитрий Быченко, СРЮ, но он просто не работает в моем случае, я не могу использовать эту опцию в цикле Еогеаспа или не должен я использовать для? – Oscar

+0

@Oscar: Та же идея с 'foreach' цикла:' Join' слова вместо '* сокровенное foreach' –

+0

Дмитрий Спасибо за ваши усилия, но это проблема я постоянно получаю. Все слова из всех линий они находятся в той же колонке. Мне нужно, что каждые строки слово было бы в разнесенных колоннах – Oscar

0

Я думаю, что вы хотите написать каждое слово в одной строке. для этого формата, используя Environment.NewLine вместо «\ п»

0

Я хотел бы использовать string.join, вы могли бы использовать LINQ агрегат тоже.

using (StreamWriter writer = new StreamWriter(fvr)) 
    { 
     string[] lines = File.ReadAllLines(fv,Encoding.GetEncoding(1257)); 
     foreach (string line in lines) 
     { 
      var words = line.Split(skyrikliai2, StringSplitOptions.RemoveEmptyEntries); 
      var outputLine = string.Join(Environment.NewLine, words); 

      writer.WriteLine(outputLine); 
     } 
    } 
+0

он по-прежнему печатает все слова в одном столбце, и мне нужно распечатать каждую строку в новом столбце и разделены пространством, и я очень ценю ваши усилия – Oscar

+0

Может быть, вы хотите, чтобы повернуть? По оси –

+0

я имею в виду создание новой строки для каждого слова? Слово1. WORD2. Word3. –