Tablica – Importowanie danych z pliku

Tablica – Importowanie danych z pliku

Tematem tego wpisu będzie Importowanie danych z pliku, który zawiera informacje o populacji ludności w miastach wojewódzkich w Polsce. Dane te pochodzą z zewnętrznego pliku danych, pliku CSV, a nasz kod będzie musiał odczytać ten plik do tablicy aby nasza aplikacja mogła korzystać z tych danych i wyświetlić je na ekranie.

Na starcie nasza aplikacja po prostu wyświetli listę 7 najbardziej zaludnionych miast w Polsce w kolejności od najbardziej zaludnionego miasta. Zacznijmy!

Zaczynamy od utworzenia prostej klasy miasto, która to klasa będzie reprezentować pojedyncze miasto w Polsce. Napiszemy teraz potrzebny nam kod.

    public class City
    {
        public string CityName { get; }
        public string CityCode { get; }
        public string Country { get; }
        public int TotalPopulation { get; }
        public int MenPopulation { get; }
        public int WomenPopulation { get; }

        public City(string cityName, 
                    string cityCode, 
                    string country,
                    int totalPopulation, 
                    int menPopulation, 
                    int womanPopulation)
        {
            CityName = cityName;
            CityCode = cityCode;
            Country = country;
            TotalPopulation = totalPopulation;
            MenPopulation = menPopulation;
            WomanPopulation = womanPopulation;          
        }
    }

Co dzieje się w naszej klasie. Nie dzieje się tutaj nic niezwykłego. Nasza klasa miasto zawiera tylko właściwości do odczytu dla :
nazwy miasta, kodu miasta , państwa które są zadeklarowane jako stringi
i całkowitą populacje ludności i całkowitą populację mężczyzn i całkowitą populację kobiet zadeklarowaną jak int (liczba całkowita).

Konstruktor wymaga dostarczenia wszystkich tych informacji w czasie tworzenia instancji klasy, i klasa ta jest zasadniczo tylko workiem na dane tylko do odczytu.
Teraz utworzymy klasę CsvReader, które będzie obsługiwać odczyt pliku CSV.

    public class CsvReader
    {
        private string _csvFilePath;

        public CsvReader(string csvFilePath)
        {
            _csvFilePath = csvFilePath;
        }

        public City[] ReadFirstNCitys(int nCitys)
        {
            return null;
        }
     }

Klasa ta zawiera pole, które przechowuje ścieżkę do pliku danych CSV, i konstruktor, który oczekuje tej ścieżki do pliku, a następnie jest metoda nazwana ReadFirstNCitys.

Będzie to metoda, która importuje tyle miast z pliku ile chcemy. Jako parametr przyjmuje liczbą całkowitą, która mówi ile miast ma odczytać z pliku, i zwraca tablicę miast. I ta metoda nie została jeszcze skończona w tym momencie jest to pusta metoda która zwraca tylko null.

A użycie tej metody która zwraca null pokazuje ważną kwestię dotyczącą tablic.
Mimo całej ich unikalnej składni z nawiasami kwadratowymi, tablica jest całkowicie normalnym typem referencyjnym. Możemy traktować je tak jak każdy inny typ referencyjny i możemy ustawić ją na wartość null i możemy zwrócić ją z funkcji.

Przejdźmy teraz do głównej metody programu,  która kontroluje ogólną logikę aplikacji. Napiszemy teraz potrzebny nam kod.

static void Main(string[] args)
{
  string filePath = @"C:\repos\population.csv";

  CsvReader csvReader = new CsvReader(filePath);

  City[] citys = csvReader.ReadFirstNCiyts(7);

  foreach (var city in citys)
  {
     Console.WriteLine($"{city.TotalPopulation} : 
                         {city.CityCode} : 
                         {city.CityName}");
  }
}

Pierwszą rzeczą jaką tutaj robimy to jest ustawienie sciezki do pliku danych CSV.
Aby zachować prosty przykład, zakodujemy na stałe scieżkę do lokalizacji pliku w moim systemie a następnie tworzymy instancję klasy CsvReader.

Potem deklarujemy tablicę z miastami i tworzymy jej instancje ustawiając ją równą temu, co zwraca metoda ReadFirstNCitys. I przekazujemy do metody liczbe siedem ponieważ chcemy pobrać tylko siedem miast.

Następnie mam pętlę foreach, która służy do wyświetlenia wszystkich pobranych miast. I wyświetlam tylko populację całkowitą, kod miasta i nazwę miasta.

Jeśli sprubujesz teraz uruchomić aplikację, to ona nie zadziała dostaniemy wyjątek NullReferenceException w miejscu, w którym chcemy iterować nasze miasta z tablicy miast a to dla tego że nie mamy jeszcze zaimplementowanej metody ReadFirstNCitys która ma pobierać miasta z pliku w tej chwili metoda zwraca tylko null.

Nasza zmienna miasta zwraca null i gdy wchodzimy do pętli nie możemy iterować się po pustej kolekcji. Zmienna po której iterujemy w pętli musi mieć rzeczywiste wartości. Musimy więc zaimplementować metodę ReadFirstNCitys która ma pobierać miasta z pliku prawidłowo aby nie zwracała nulla. I to zrobimy już w kolejnym wpisie.

Całościowe omówienie tematu kolekcji (tablica, lista, kolejka, stos, słownik).
Wiele przydatnych wskazówek i dobrych praktyk dostępne jest na kursie:

https://dev-hobby.pl/kursy/c-wprowadzenie-do-kolekcji/

149 comments

  1. Hello! I could have sworn I’ve been to this blog before but after browsing through some of the post I realized it’s new to me. Anyways, I’m definitely happy I found it and I’ll be book-marking and checking back frequently!

  2. You made some nice points there. I looked on the internet for the subject matter and found most individuals will agree with your site.

  3. Hello! I could have sworn I’ve been to this blog before but after browsing through some of the post I realized it’s new to me. Anyways, I’m definitely happy I found it and I’ll be book-marking and checking back frequently!

  4. Hi to all, how is everything, I think every one is getting more from this website, and your views are pleasant for new users. Mavra Penn Minnie

  5. I’ve been surfing online greater than three hours as of late, yet I by no means found any fascinating article like yours. It¡¦s lovely value enough for me. In my view, if all site owners and bloggers made just right content as you probably did, the internet can be much more useful than ever before.

  6. Pretty section of content. I simply stumbled upon your weblog and in accession capital to claim that I get actually enjoyed account your blog posts. Raeann Maximilianus Cesaro

  7. Having read this I thought it was very enlightening. I appreciate you spending some time and energy to put this informative article together. Jeniece Grant Alfred

  8. It’s not my first time to go to see this site, i am visiting this web page
    dailly and take fastidious facts from here every day.

  9. Awesome post. I am a regular visitor of your site and appreciate you taking the time to maintain the excellent site. I will be a regular visitor for a long time. Marissa Leeland Enrico

  10. If you are going for best contents like I do, only visit this web site everyday since it provides feature contents, thanks| Livia Bartholemy Vivyanne

  11. Asking questions are genuinely good thing if you are not understanding anything totally, however this post offers good understanding yet.| Morissa Stefan Isidore

  12. Hi! This is my first visit to your blog! We are a group of volunteers and starting a new project in a community in the same niche. Your blog provided us useful information to work on. You have done a extraordinary job! Jackqueline Dov Rolfe

  13. I really appreciate this post. I have been looking everywhere for this! Thank goodness I found it on Bing. You have made my day! Thank you again! Alia Arv Katheryn

  14. whoah this weblog is great i really like reading your posts. Stay up the good paintings! You know, many persons are looking round for this information, you can help them greatly. Dede Hewie Aleedis

  15. Hi, i believe that i noticed you visited my site so i got here to return the choose?. I am attempting to find issues to enhance my web site!I assume its ok to use some of your ideas!!| Damaris Halsey Reagen

  16. Everything is very open with a very clear description of the challenges. It was truly informative. Your site is very helpful. Thanks for sharing! Ree Chrisse Pike

  17. An outstanding share! I have just forwarded this onto a friend who was conducting a little homework on this. Gnni Boony Padget

  18. After checking out a number of the blog posts on your website, I truly like your technique of blogging. I saved it to my bookmark website list and will be checking back in the near future. Please visit my web site too and tell me what you think. Tricia Jarrett Gazo

  19. It is appropriate time to make some plans for the future and it is time to be happy. I have read this post and if I could I want to suggest you few interesting things or suggestions. Perhaps you could write next articles referring to this article. I wish to read even more things about it! Katerina Osgood Guenna

  20. Cheers to you, I realized something new. Thank you so much. I actually seem forward to working with you. Cora Benedicto Calandra

  21. Thanks for sharing your info. I truly appreciate your efforts and I am waiting for your next write ups thanks once again. Tamara Murry Shaddock

  22. Today, while I was at work, my sister stole my iPad and tested to see if it can survive a thirty foot drop, just so she can be a youtube sensation. My iPad is now broken and she has 83 views. I know this is totally off topic but I had to share it with someone! Rachelle Cesaro Lach

  23. Thanks for the good writeup. It if truth be told used to be a leisure account it. Glance complicated to far introduced agreeable from you! However, how could we keep in touch? Dolli Sutton Nepil

  24. I do trust all of the ideas you have offered in your post. They are very convincing and will certainly work. Nonetheless, the posts are too quick for novices. May you please extend them a little from subsequent time? Thank you for the post. Darcy Ulrich Rives

  25. I was curious if you ever thought of changing the layout of your blog? Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better. Youve got an awful lot of text for only having one or 2 pictures. Maybe you could space it out better? Allegra Creighton Rambow

  26. I have read so many posts about the blogger lovers except this post is actually a pleasant article, keep it up. Edeline De Witt Rudd

  27. Way cool! Some extremely valid points! I appreciate you writing this article and also the rest of the site is really good.| Camella Augustine Dream

  28. Undeniably believe that which you said. Your favourite reason seemed to be on the net the easiest thing to be aware of. I say to you, I certainly get annoyed at the same time as folks consider issues that they plainly do not know about. You controlled to hit the nail upon the top and outlined out the entire thing with no need side effect , people can take a signal. Will likely be back to get more. Thanks Lilllie Ravi Gaye

  29. I just could not go away your website before suggesting that I extremely loved the standard info a person provide in your visitors? Is gonna be back frequently in order to check out new posts Laurette Urbanus Jessy

  30. Hey there. I found your blog by way of Google while searching for a comparable topic, your website came up. It appears great. I have bookmarked it in my google bookmarks to visit then. Dominga Giff Margy

  31. Greetings! Very useful advice within this post! It is the little changes that make the biggest changes. Thanks a lot for sharing! Scarlet Bryant Scornik

  32. Simply wish to say your article is as astounding. The clearness in your post is simply nice and i could assume you are an expert on this subject. Fine with your permission allow me to grab your RSS feed to keep updated with forthcoming post. Thanks a million and please carry on the gratifying work. Candis Judah Uzzial

  33. Good post! We will be linking to this particularly great article on our website. Keep up the good writing. Melinda Dore Eloisa

  34. Even if you watch every pro game available, there is always more technical information you can know. Izabel Kahaleel Steele

  35. Every weekend i used to pay a quick visit this website, because i wish for enjoyment, as this this web page conations actually pleasant funny information too.| Regine Ban Cusick

  36. Dzięki, już od dłuższego czasu szukałem informacji na ten temat, a Twoja jest najlepsza, o jakiej się do tej pory dowiedziałem.

  37. Witam! Chciałbym tylko podziękować za doskonałe informacje, które masz w tym poście. Wkrótce wrócę na Twoją stronę internetową po więcej.

  38. Cieszę się, że mogę rzucić okiem na ten post na blogu, który zawiera wiele cennych informacji, dzięki za dostarczenie tego rodzaju informacji.

  39. Twój styl jest bardzo wyjątkowy w porównaniu z innymi ludźmi, od których czytałem. Dziękuję za wiadomości. Chyba po prostu zaznaczę ten blog w książce.

  40. Chciałbym bardzo podziękować za miłe informacje, które masz w tym poście. Powinienem wrócić do Twojej witryny później.

  41. Jestem pod ogromnym wrażeniem twoich umiejętności pisania, a także układu twojego bloga. Czy to płatny motyw, czy też dostosowałeś go samodzielnie? Tak czy inaczej, zachowaj dobrą jakość pisania, dziś rzadko spotyka się świetny blog, taki jak ten.

  42. Ten wyjątkowy blog jest bez wątpienia niesamowity, dodatkowo rzeczowy. Znalazłem w nim wiele przydatnych rzeczy. Uwielbiam wracać od czasu do czasu. Wielkie dzięki!

  43. Bloguję dość często i naprawdę doceniam twoje informacje. Ten wspaniały artykuł naprawdę wzbudził moje zainteresowanie. Zamierzam dodać Twojego bloga do zakładek i sprawdzać nowe informacje raz w tygodniu. Zdecydowałem się również na Twój kanał RSS.

  44. Wow, niesamowita struktura bloga! Od jak dawna prowadzisz bloga? ułatwiasz przeglądanie bloga. Pełny widok Twojej witryny jest świetny, tak samo schludny, jak zawartość!

  45. Myślę, że zauważyłeś kilka bardzo interesujących szczegółów, dziękuję za post. Marissa Devlin Ondrej

  46. Od razu pobiorę Twój kanał rss, ponieważ nie mogę znaleźć hiperłącza do subskrypcji e-mail lub usługi e-biuletynu. Czy masz jakieś? Proszę pozwolić mi zrozumieć, abym mógł zasubskrybować. Dzięki. Melisandra Peadar Procora

  47. Świetny blog! Dodatkowo Twoja strona internetowa działa bardzo szybko! Z jakiego hosta internetowego korzystasz? Czy mogę otrzymać hiperłącze partnerskie dla twojego hosta? Chciałbym, żeby moja strona ładowała się tak szybko, jak twoja lol Charlene Turner Feldt

  48. Naprawdę doceniam udostępnienie tego posta na blogu. Naprawdę dziękuję! Pisz dalej. Loise Ellis Fishman

  49. Tak czy inaczej, zachowaj dobrą jakość pisania, obecnie rzadko spotyka się fajny blog, taki jak ten. | Stephannie Kristofor Batha

  50. Hej, to świetny post. Czy mogę użyć jego części w mojej witrynie? Oczywiście podałbym link do Twojej witryny, aby ludzie mogli przeczytać cały artykuł, gdyby chcieli. Dzięki tak czy inaczej. Kata Darin Genisia

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *