Wpis z mikrobloga

Siemanko mirki,
Jako jeden z punktów mojej magisterki mam do wykonania całkiem prosty program, który będzie pobierał pliki .csv (z dużą ilością danych), a następnie wykona operacje porównania danych ze sobą i wypluje plik .csv, który będzie spełniał funkcję raportu. Mam 2 koncepcje i nie wiem, która będzie szybciej wykonywać operacje na danych zawartych w plikach csv. Dodam, że narzucono mi C# wraz z MySQL lub sam C#.
Czy lepiej utworzyć bazę danych z plików .csv w MySQL i połączyć ją z C#, a następnie napisać kod, który będzie wykonywał porównania. Czy też bezpośrednio parsować pliki csv do C#(bez użycia MySQL) i dopiero wtedy wykonywać na nich operacje?
Dodam, że nie studiuję Informatyki ani Automy, także skill w programowaniu jest raczej marny.
#programowanie #csharp #mysql #magisterka #csv
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@kontaktron: no to ja bym się w bazę raczej nie bawił, tylko wczytał to w postaci listy struktur, obliczył i wypluł do innego pliku. Chyba, że obliczenia wymagają przeszukiwania tej listy tak, że mechanizmy bazodanowe przyspieszyłyby/ułatwiłyby całe zadanie.
  • Odpowiedz
@wnocy: Polegałoby to na tym, iż najpierw porównywane są ze sobą 2 pliki csv, a konkretnie sprawdzane jest czy dane zawarte w 4 kolumnach, zawierają się w kolejnym z plików csv, jeśli tak to operacja się kończy, jeśli nie to dochodzi do porównania z kolejnym plikiem .csv. Nie wiem czy wystarczająco jasno się wyraziłem, jeśli nie to daj znać ;)
  • Odpowiedz
@qweasdqweasd: Postaram się jak najjaśniej potrafię i z większą dokładnością wytłumaczyć:
Mam 3 pliki .csv, nazwijmy je CSV1, CSV 2, CSV 3,
W tych 3 plikach znajdują się kolumny o nazwach X1, Y1, Z1, K1 dla CSV1, analogicznie dla kolejnych 2 plików
Każda z kolumn zawiera około 20000 wierszy.
Dla pliku CSV1 wykonywana jest operacja, która ma na celu sprawdzenie czy argumenty dla kolumn X1, Y1, Z1, K1 , występują w 14 plikach .csv. Jeśli kolumny X1, Y1, Z1, K1 dla wiersza 1-ego przyjmują wartości A1, B1, C1, D1 i te wartości A1, B1, C1, D1 znajdą się w pierwszym z 14 porównywanych plikach .csv to wówczas, dochodzi do konca operacji i brane są pod uwagę kolejne wartości A2, B2, C2, D2, które następnie też są wyszukiwane w tych plikach .csv (14 porównawczych), jeśli w pierwszym pliku porównawczym nie znajdziemy argumentów A2, B2, C2, D2 to szukamy w kolejnym z plików itd. Analogicznie sytuacja ma się dla plików CSV2 i CSV3.
Plik wynikowy ma określać to, czy X1, Y1, Z1, K1 o zadanych wartościach znajdują się w którymś z 14 plików porównawczych, jesli tak to dla kolumn X1, Y1, Z1, K1 o wartościach A1, B1, C1, D1 zostanie przypisane słowo "tak" (oznaczające, że import danych
kontaktron - @qweasdqweasd: Postaram się jak najjaśniej potrafię i z większą dokładno...

źródło: comment_2vzWHpbdTf7KbvqmUk9OzkWa0woZojfp.jpg

Pobierz
  • Odpowiedz
@kontaktron: rozumiem. W takiej sytuacji nie ma sensu angażować do tego bazy danych. Wczytaj sobie wszystkie pliki do list. Następnie iteruj po danych z tego CSV1 i dla każdego wiersza wywołuj sobie funkcję, która zwraca informację, czy rekord został odnaleziony czy nie.
  • Odpowiedz
@kontaktron: oczywiście funkcję sprawdzającą rozbij sobie na kolejne mniejsze. Jedna odpowiedzialna za sprawdzanie w jednej konkretnej liście. Druga odpowiedzialna za wywoływanie tej poprzedniej dla odpowiedniej listy, itd. ;]
  • Odpowiedz
@kontaktron: ja bym to widział tak:
1. tworzysz sobie klasę z takimi polami jakie masz kolumny w tym csv
2. overridujesz hashcode i equals
3. wczytujesz sobie wszystkie pliki do HashSetów
4. sprawdasz sobie normalnie po kolei te sety czy sobie zawierają i wypisujesz do raportu
5. gg easy
  • Odpowiedz