Jak pobrać dane z pliku tekstowego?

0

Witam, chcę wczytać do tej listy kilka linijek danych z pliku. To mój pierwszy program w c#
Plik ma taką strukturę:

Imie Nazwisko Wiek Sprawnosc

są oddzielone spacjami, i kolejna osoba w kolejnej linii.

Mam takie pytania:

  1. Jak wczytać tego typu informacje.
  2. Jak sprawdzić i zwrócić do zmiennej długość string?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace zad2_pliki
{
    class Program
    {
        static void Main(string[] args)
        {

            StreamWriter plik_in = new StreamWriter("plik.txt");

            List<osoba> wejscie = new List<osoba>();

            Console.ReadKey();
        }
    }

    public class osoba
    {
        public string imie;
        public string nazwisko;
        public int wiek;
        public float sprawnosc;
        public int wielkosc_imie;
        public int wielkosc_nazwisko;
    }
}
0

Poszukaj w googlach, jedt informscji od metra. I jak już to do czytania z pliku służy streamreader a streamwriter

1

Najlepiej nie ładować całego pliku do pamięci tylko lecieć linijka po linijce:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.Threading.Tasks;
using System.IO;

namespace ForP
{
    class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
    }

    class PersonsReader
    {
        public IList<Person> Read(string path)
        {
            using (var filestream = new FileStream(path, FileMode.Open))
            {
                using (var reader = new StreamReader(filestream))
                {
                    var persons = new List<Person>();
                    var line = "";

                    while ((line = reader.ReadLine()) != null)
                    {
                        var split = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        var person = new Person { Name = split[0], Surname = split[1] };
                        persons.Add(person);
                    }

                    return persons;
                }
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var reader = new PersonsReader();
            foreach (var p in reader.Read("file.txt"))
            {
                Console.WriteLine(p.Name + " " + p.Surname);
            }
        }
    }
}

Można użyć także File.ReadAllLines jeżeli plik nie jest duży. IMHO są lepsze metody przechowywania danych w plikach vide CSV albo jakaś prosta serializacja XML czy coś. No, bo tutaj co zrobisz kiedy ktoś będzie miał podwójne nazwisko ze spacją w środku?

PS: PersonsReader w sumie może być static.

0

dzięki, a jest może metoda, aby lecieć słowo po słowie?

0

A dlaczego chcesz sobie komplikować zadanie zamiast zrobić splita po spacjach?

0

myślałem że jest jakaś prosta funkcja do tego, jak w c++. mam pytanko

co robi ta linijka?

using (var filestream = new FileStream(path, FileMode.Open))

nie można od razu ścieżki do pliku podać w ```
StreamReader

1

Dokumentacja mówi, że można ale leciałem z pamięci i nawet nie zwróciłem uwagi. Spróbuj, powinno też zadziałać. using zamknie automatycznie strumień po zakończonej robocie, a ta linijka otwiera plik do odczytu.

https://msdn.microsoft.com/pl-pl/library/f2ke0fzy(v=vs.110).aspx

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