Разделение элемента списка <string>и его форматирование - PullRequest
1 голос
/ 19 сентября 2011

У меня есть список, который заполняется чем-то вроде этого в цикле:

myList.Add("john,smith,50,actor");

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

Поэтому я хочу, чтобы мой текстовый файл выглядел так:

NAME    SURNAME      AGE      WORK
john    smith        50       actor

И так далее.Можете ли вы помочь мне выяснить цикл foreach для этого случая?

Ответы [ 4 ]

3 голосов
/ 19 сентября 2011
const string Format = "{0,-10} {1,-10} {2,-10} {3,-10}";

var myList = new List<string>();
myList.Add("john,smithhh,50,actor");
myList.Add("a,b,c,d");

var res = myList.Select(i => i.Split(','));

Console.WriteLine(Format, "NAME", "SURNAME", "AGE", "WORK");
foreach (var line in res)
{
    Console.WriteLine(Format, line[0], line[1], line[2], line[3]);
}

Выход:

NAME       SURNAME    AGE        WORK
john       smithhh    50         actor
a          b          c          d
0 голосов
/ 19 сентября 2011

, так как у вас уже есть разделитель (","), так что вы можете напрямую сделать следующее для повышения производительности, не нужно конвертировать:

var result = new StringBuilder();
result.AppendLine("NAME\tSURNAME\tAGE\tWORK");
myList.ForEach(i => result.AppendLine(i.Replace(",", "\t")));
System.IO.File.WriteAllText("foo.txt", result.ToString());
0 голосов
/ 19 сентября 2011

Вот как можно создать текстовый файл наш или ваш List<string>:

var path = @"C:\test.txt";
var streamWriter = File.Exists(path) ? File.AppendText(path) : File.CreateText(path);
using (streamWriter)
{
    streamWriter.WriteLine("NAME\tSURNAME\tAGE\tWORK");
    foreach (string s in myList)
    {
        streamWriter.WriteLine(s.Replace(",", "\t"));
    }
}
0 голосов
/ 19 сентября 2011

Вы можете разбить их на строки следующим образом:

String[] strings = myList[i].Split(',');

А затем получите их по отдельности, вот так:

for(int i = 0; i < strings.Count; i++)
{
    file.Write(strings[i] + " ");
}
...