Zapisywanie danych w lokalnej bazie danych w pliku CSV

0

Hej, jak w temacie powyżej. Mam zadanie w którym muszę przygotować w kontrolerze 5 metod publicznych. Jeżeli chodzi o odczyt danych to sobie poradziłem.

public static void readFile()
       {
            try
            {

                listOfStudents = System.IO.File.ReadAllLines(path)
                                          .Skip(1)
                                          .Select(v => Student.FromCsv(v))
                                          .ToList();

            }
            catch (Exception ex)
            {
                Console.WriteLine("zonk");
            }
        } 

Metoda FromCsv z klasy Student

public static Student FromCsv(string csvLine)
        {
            string[] values = csvLine.Split(',');
           Student student = new Student();
           student.Imie = (values[0]);
            student.Nazwisko = values[1];
            student.NumerIndeksu = values[2];
            student.DataUrodzenia = values[3];
            student.Studia = values[4];
            student.Tryb = values[5];
            student.Email = values[6];
            student.ImieOjca = values[7];
            student.ImieMatki = values[8];
            return student;
        }

W końcu metoda GetStudent z klasy StudentsController

  [HttpGet]
        public IActionResult GetStudents()
        {

             readFile();

            return Ok(listOfStudents);
        }

Plik csv musi być następującej postaci:

Imie,nazwisko,numerIndeksu,dataUrodzenia,studia,tryb,email,imię ojca, imię matki
Jan,Kowalski,s1234,3/20/1991,Informatyka,Dzienne,[email protected],Jan,Anna

Nie mogę poradzić sobie z zapisem. Nie proszę o rozwiązanie. Czy ktoś jest w stanie mnie nakierować jak to ugryźć?

0

@AdamWox: to jest zadanie uczelniane, nie mogę korzystać z zewnętrznych bibliotek.

0

Z czym konkretnie masz problem? Nie wiesz jak zapisywać do pliku? Nie wiesz jak skleić stringa który zapiszesz?

1

Buduja ta linie csv przez 'StringBuilder'a' i ja po prostu zapisz. Ewentualnie wykorzystaj skladnie:
$"{student.Imie},{student.Nazwisko}";
ktora dosyc prosto zwraca string.
Potem taka linie po prostu zapisz w pliku.

0

@kzkzg: Nie wiem jak zapisać tego studenta jako string: Jan,Kowalski,s1234,3/20/1991,Informatyka,Dzienne,[email protected],Jan,Anna.

Mam takie rozwiązanie:

 public static void writeFile()
        {

            StringBuilder csv = new StringBuilder();
            try
            {
                listOfStudents.ForEach(line =>
                {
                    csv.AppendLine(string.Join(",", line));
                });

                System.IO.File.WriteAllText(path, csv.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine("zonk");
            }
        }

Zapisuje obiekt w pliku csv: Cwiczenie3_apbd.Models.Student

0

@Varran: tą składnie $"{student.Imie},{student.Nazwisko}"; używamy w metodzie Append, czy AppendLine()?

0

Rozwiązanie które zaprezentowałeś nie działa czy w czym problem?

3

tą gotową linie do zapisu mozna tworzyc tak

string liniaDoPlikuCSV = $"{student.Imie},{student.Nazwisko},{student.NumerIndexu},{student.DataUrodzenia},{student.Studia},{student.Tryb},{student.email},{student.ImieOjca},{student.ImieMatki}"

wystarczy przeleciec po kolekcji studentów "listOfStudents", dla kazdego elementu kolekcji stworzyc taki string i potem taką linię "liniadoPlikuCSV" zapisac jako linia w pliku

2

tak jak napisałem. Zapisuje obiekt w pliku csv: Cwiczenie3_apbd.Models.Student a powinno być: Jan,Kowalski,s1234,3/20/1991,Informatyka,Dzienne,[email protected],Jan,Anna

Bo przekazujesz cały obiekt line w ForEach i wtedy zapisuje Ci do pliku domyślną wartość zwróconą przez metodę ToString() dla obiektu, czyli namespace + nazwa klasy
Przed csv.AppendLine(...) utwórz sobie zmianną string i zrob coś w stylu jak @Varran Ci napisał. Następnie do csv.AppendLine(...) przekaż tą zmienną zamiast całego obiektu line

1

a ci profesorowie to na pewno wymagają abyś pisał obsługę CSVki??

współczuje

0

OK, działa. Dzięki wszystkim za pomoc!

 public static void writeFile()
        {
            

            StringBuilder csv = new StringBuilder();
            try
            {
                listOfStudents.ForEach(student =>
                {
                    var lineToCsvFile = $"{student.Imie},{student.Nazwisko},{ student.NumerIndeksu},{ student.DataUrodzenia},{ student.Studia},{ student.Tryb},{ student.Email},{ student.ImieOjca},{ student.ImieMatki}";
                    csv.AppendLine(lineToCsvFile);
                });

                System.IO.File.WriteAllText(path, csv.ToString());

            }
            catch (Exception ex)
            {
                Console.WriteLine("zonk");
            }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1