Mam wiele różnych plików CSV z danymi w nim (w tym nagłówki).

Nie mogę tego zrozumieć, jak dodać nową kolumnę w pozycji numer dwa.

Mogę wypełnić nową komórkę z wartością NULL (każdy wiersz), ale nowa kolumna jest w pierwszej pozycji.

Zobacz zdjęcie załącznika: Nowa kolumna musi być po kolumnie Idinta.

enter image description here

Czy ktoś może mi pomóc?

Z góry dziękuję

Mój kod poniżej.

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);
List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList();
for (int i = 0; i < CSV.Count; i++)
{
    CSV[i].Insert(0, i == 0 ? "Headername" : "Filename");
}
File.WriteAllLines(output, CSV.Select(x => string.Join("|", x)));

#edit 01

enter image description here

#edit 02

N|IDINTA|Filename|DDMMYYYY HHMMSS|
0
Antonio Mailtraq 17 luty 2017, 16:45

2 odpowiedzi

Najlepsza odpowiedź

Po prostu zmień indeks w instrukcji {x0}}:

CSV[i].Insert(2, i == 0 ? "Headername" : "Filename");

Korzystając z zmiennej dla żądanej pozycji, pełny kod byłby:

// define the desired position here:
int posNewColumn = 2;

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);
List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList();
for (int i = 0; i < CSV.Count; i++)
{
    if( CSV[i].Count > posNewColumn)
    {
        CSV[i].Insert(posNewColumn , i == 0 ? "Headername" : "Filename");
    }
    else 
    {
    // append the new data at the end if the existing line is too short.
    // You may want to do nothing instead or fill the appropriate number
    // of empty cells before adding.
        CSV[i].Add(i == 0 ? "Headername" : "Filename");
    }
}
File.WriteAllLines(output, CSV.Select(x => string.Join("|", x)));
1
wkl 17 luty 2017, 14:24

To powinno wystarczyć.

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);

var CSV = CSVDump.Select(x => x.Split('|').ToList());

var newInserted = CSV.Aggregate(new List<List<String>>(), (l, i) =>
{
    i.Insert(1, (l.Count == 0) ? "header" : "fileName");
    l.Add(i);
    return l;
});

File.WriteAllLines(output, newInserted.Select(x => string.Join("|", x)));
0
kemiller2002 17 luty 2017, 14:19