[C#] Plik CSV z wieloma kolumnami zamiast wierszami


(Marcin Obala) #1

Cześć

 

Przestaję wierzyć w programistów, za dużo mam styczności z niezrozumiałą dla mnie logiką. Mam plik CSV generowany przez maszynę. Nie mogę go w żaden sposób zmienić więc mogę go jedynie obrobić. Wygląda to tak. Kiedy chcę wygenerować dane dla jednego produktu to wygląda to tak:

 

ID    JakasWartosc1 InnaWartosc1 JeszczeInnaWartosc1 IDodatkowoJeszczeInna1

 

 

ale jak chcę wyrzucić dane dla np. 5 produktów to już domyślacie się co on robi? Zamiast zmienić ID i walić dane pod te same kolumny to dokleja 5 nowych kolumn obok dla każdego z produktów czyli plik csv ma 25 kolumn. A co jeśli mam do przejrzenia dane z całej produkcji gdzie tych produktów było 500 ? :wink: oczywiście mam 500*5 = 2500 kolumn. Oczywiście kolumny są identyczne. Nagłówki zmieniają się tylko tak że zamiast 1 jest kolejna liczba. I teraz chcę to przekształcić żeby wszystkie 2500 kolumn połączyć w 5 kolumn ale dane przenieść do wierszy. Wiem jak to zrobić na piechotę bawiąc się pętlami ale może ktoś już ma jakieś lepsze rozwiązanie.

 

 

 

 


(Tzdziech) #2

Dodać na koncu znak konca linii?


(Marcin Obala) #3

Masz plik CSV w którym jest 2500 column i 1000 wierszy. Gdzie ja mam dodać znak końca linii żeby cokolwiek rozdzielić? Dodatkowo jest pewna trudność, plik wygląda tak:

 

ID1,WspolnaKolumna1, WspolnaKolumna2, Par1, Par1, Par1, Par1, ID2, Par2, Par2, Par2, Par2, ID3, Par3, Par3, Par3, Par3, ID4, Par4, Par4, Par4, Par4 ... ID500, Par500, Par500, Par500, Par500

 

gdzie Par to parametr, każdy z 4 nazywa się inaczej ale ja uogólniłem.


(lucas80) #4

Wykorzystaj wyrażenie regularne. Zamień ID[liczba] na newlineID[liczba] przykładowo tak:

using (StreamReader reader = new StreamReader("wejscie.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
  
               line=Regex.Replace(line, "ID([0-9]+)", "\nID$1");
               Console.WriteLine(line);

            }
        }

Jeśli ID[liczba] pojawia się tylko na początku grupy, a nie jako parametr to powinno zadziałać.

ID1,WspolnaKolumna1, WspolnaKolumna2, Par1, Par1, Par1, Par1, 
ID2, Par2, Par2, Par2, Par2, 
ID3, Par3, Par3, Par3, Par3, 
ID4, Par4, Par4, Par4, Par4 , 
ID500, Par500, Par500, Par500, Par500

(Marcin Obala) #5

Napisałem już program, który mi to konwertuje. Nawet jeśli robi to na piechotę, czytając w pętli po kolei kolumny to działa to bardzo szybko więc nie będę się bawił w jakieś eleganckie rozwiązanie.


(pulka103) #6

... a teraz ja zaczynam tracić wiarę w programistów. 


(Marcin Obala) #7

Nie mam zamiaru się spuszczać nad czymś co użyję raz i zapomnę. Plik skonwertowany do formy czytelnej i tyle.