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/

164 comments

  1. Great post! We are linking to this great article on our site. Keep up the great writing. Dinny Ben Cristobal

  2. Fabulous, what a webpage it is! This webpage provides useful facts to us, keep it up. Bambi Nickie Wenonah

  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. You made some nice points there. I looked on the internet for the subject matter and found most individuals will agree with your site.

  5. 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!

  6. I cannot thank you enough for the blog.Really thank you! Great. Antoinette Agin

  7. Appreciate you sharing, great blog article.Much thanks again. Really Cool. Burl Rindler

  8. Thanks for the post.Really thank you! Much obliged. Luana Czolba

  9. Hej, dzięki za artykuł. Świetny. Miquel Battersby

  10. I regard something genuinely special in this website. Carlita Fields Boggers

  11. I really like and appreciate your article. Much thanks again. Awesome. Cary Colman Mientao

  12. You ought to be a part of a contest for one of the most useful sites on the internet. Tobye Eugenius Hiram

  13. I really liked your article post. Really looking forward to read more. Much obliged. Krista Umberto Vorster

  14. 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

  15. A cool blog post right there mate ! Thanks for the post . Daisie Tann Fleck

  16. Right here is the right webpage for anybody who wishes to find out about this topic. Dominga Gregoire Lyndel

  17. I am forever thought about this, appreciate it for posting. Anastasia Omero Hortense

  18. 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.

  19. 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

  20. Great looking website. Presume you did a great deal of your very own coding. Trixy Fulton Massie

  21. 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

  22. 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.

  23. 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

  24. 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

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

  26. Having read this I thought it was really enlightening. Vittoria Javier Muhammad

  27. Hi, I read your blogs regularly. Your humoristic style is awesome, keep up the good work! Stacy Brucie Lindeberg

  28. You have remarked very interesting points! ps nice site. Ardisj Malcolm Romonda

  29. 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

  30. The girl in the first white bikini picture that says after is not Scarlett. Angel Andros Gold

  31. 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

  32. 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

  33. 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

  34. 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

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

  36. 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

  37. 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

  38. Hey there! Would you mind if I share your blog with my myspace group? Hayley Leonhard Sale

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

  40. Have you ever thought about publishing an ebook or guest authoring on other blogs? Marita Salomo Procora

  41. 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

  42. 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

  43. 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

  44. As soon as I detected this site I went on reddit to share some of the love with them. Babette Keene Sisto

  45. You have noted terribly interesting points ! ps tight web web site here. Albertina Sullivan Jasmin

  46. 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

  47. 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

  48. 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

  49. I consider something truly special in this website. Megan Tito Milore

  50. 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

  51. 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

  52. 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

  53. Thanks for sharing your thoughts about Sling TV. Regards Glennis Justis Karina

  54. Thanks for the article post. Much thanks again. Great. Torie Thedrick Creedon

  55. 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

  56. Your site is very helpful. Many thanks for sharing! Katerina Shaw Boak

  57. 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

  58. 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

  59. Nice blog here! Also your site loads up very fast! Aggi Robinet Goto

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

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

  62. Excellent post! We are linking to this great post on our site. Keep up the good writing. Denys Marijn Hutchings

  63. Thanks to my father who informed me regarding this website, this blog is truly awesome. Darell Gabe Winnie

  64. I used to be able to find good info from your blog posts. Flora Asher Dowling

  65. Very good article post. Really thank you! Fantastic. Lisette Beltran Goff

  66. 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

  67. Dostałem się tutaj przypadkiem ale zostane na dłużej good job!

  68. Cóż, naprawdę mi się podobało. Ten oferowany przez Ciebie temat jest bardzo przydatny…

  69. 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.

  70. 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.

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

  72. Cześć, codziennie czytam Twoje blogi. Twój styl pisania jest dowcipny, kontynuuj dobrą robotę!

  73. 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.

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

  75. Naprawdę podoba mi się ta strona, ma fajne rzeczy.

  76. Dostaję bardzo przydatne informacje na twojej stronie, czuję się szczęśliwy Miś

  77. 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.

  78. 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!

  79. 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.

  80. 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ść!

  81. Odwiedziłem wiele stron internetowych, i ta jest naprawde dobra

  82. Dobry artykuł. Zawsze podążaj za swoią pasją.

  83. Naprawdę lubię analizować tę witrynę internetową, ma świetne posty. Pet Vincenz Burnett

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

  85. 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

  86. Ś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

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

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

  89. 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

  90. Someone necessarily assist to make significantly posts I would state.
    That is the first time I frequented your website page and so far?
    I amazed with the research you made to make this particular submit incredible.

    Great task!

  91. Hola! I’ve been reading your web site for some time now and
    finally got the courage to go ahead and give you a shout out from
    Austin Tx! Just wanted to tell you keep up the excellent
    job!

  92. Hi there to every one, the contents present at this site are actually awesome for people experience, well, keep up the good work fellows

  93. Attractive section of content. I just stumbled upon your
    website and in accession capital to assert that I get in fact enjoyed account your blog posts.
    Anyway I’ll be subscribing to your augment and even I achievement you access consistently fast.

  94. Just desire to say your article is as astounding.
    The clarity to your submit is simply spectacular and i could think you’re a professional in this subject.
    Fine with your permission let me to grasp your feed to keep updated with coming near near post.
    Thank you a million and please carry on the enjoyable work.

  95. Hi, every time i used to check website posts here in the early hours in the morning,
    as i enjoy to find out more and more.

  96. Everyone loves what you guys are usually up too.
    This kind of clever work and exposure! Keep up the
    amazing works guys I’ve included you guys to blogroll.

  97. Hi there! This article could not be written any better! Looking through this article reminds
    me of my previous roommate! He constantly kept talking about this.
    I most certainly will send this post to him. Pretty sure he’s going
    to have a very good read. Many thanks for sharing!

  98. Znalezienie dowolnego tematu jest bardzo łatwe w porównaniu z książkami, ponieważ znalazłem ten post na tej stronie.

Dodaj komentarz

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