Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C#] importowanie danych z pliku txt do DataGridView

Alkaidek 20 Gru 2011 09:40 2238 2
  • #1 20 Gru 2011 09:40
    Alkaidek
    Poziom 10  

    Jak można pobrać dane z pliku tekstowego do dataGridView? Plik tekstowy wygląda następująco:

    Klient{
    id =1758
    kod = Kopalnie Sp. z o.o.
    nazwa = Kopalnie Sp. z o.o.
    aktywny =1
    znacznik =78
    wprowadzil{
    kod =MM
    }
    miejscowosc =Pietrzykowice
    ulica =Beskidzka
    ulica2 =
    dom =2A, Zarzecze
    dom2 =
    lokal =
    lokal2 =
    kodPocztowy =34-326

    NIP =553-23-88-349
    VIES =0
    regon =240685911
    telefon1 =033 489-32-94
    email =
    stronaWWW =
    nazwisko =
    imie =
    nazwaBanku =
    idFK =1821
    parametrFK =Krajowy
    kraj{
    symbol =PL
    }
    kraj2{
    symbol =
    }
    rejestr{
    kod =KASA
    }
    formaPl{
    nazwa =Zapłacono gotówką
    termin =0
    }
    rodzaj{
    kod =Klient 
    }
    katalog{
    nazwa =\
    }
    }
    i takich klientów wypisanych w pliku tekstowym jest ponad 100... czy jest jakiś łatwy sposób aby wyświetlić informację o klientach w datagridzie?

    0 2
  • Pomocny post
    #2 20 Gru 2011 11:48
    marcinj12
    Poziom 40  

    Zależy, co rozumieć pod pojęciem "prosty sposób". Cudów nie należy się spodziewać - na pewno nie ma jednego polecania, które samo sobie ustali strukturę pliku i wczyta ją do tabeli, trzeba użyć jakiegoś przetwarzania danych przed ich wczytaniem. Sprawę dodatkowo komplikuje fakt, że najwyraźniej dane mogą być "zagnieżdżone" wewnątrz nawiasów klamrowych

    Ze wczytaniem danych z pliku chyba problemów nie masz? Do dataGridView możesz np. podpiąć tabelę i dodawać kolejne wiersze, wypełniając je danymi z pliku, bądź utworzyć dodatkową klasę pomocniczą, coś w stylu:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    (oczywiście uproszczona dla przykładu), możesz też dodać konstruktor inicjujący wszystkie parametry.

    Jeżeli struktura danych w pliku jest stała, to ja bym się pokusił o wykorzystanie wyrażeń regularnych: po dołączeniu przestrzeni
    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    i wczytaniu do zmiennej dane zawartości całego pliku tekstowego, można użyć czegoś takiego:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Najważniejsze, to stworzyć prawidłowy wzór pattern - jak widać ja po prostu skopiowałem całą strukturę pliku, a potem dane zamieniłem na "leniwą gwizdkę" powtarzającą kropkę, czyli dopasowującą się w sposób leniwy do dowolnego znaku zero lub więcej razy. Całość umieszczona w nawiasach tworzących grupy (ostatni (.*?) zastosowałem na potrzeby przykładu, żeby dopasowało wzorzec, jak przerobisz wszystkie pola, ta grupa będzie zbędna). To samo dotyczy opcji regex'a RegexOptions.Singleline, jak przerobisz wszystkie pola, prawdopodobnie będzie ona zbędna.

    Fragment dodawania do klasy też został uproszczony - zakłada się, że wszystkie pola są niepuste w pliku, w praktyce, trzeba by dodać przed dokonaniem parsowania sprawdzanie, czy pole jest niepuste, a jeżeli tak - ustawić jakąś wartość domyślną (może warto do tego zastosować osobną metodę?)

    Dla mnie ten sposób jest najprostszy, bo nie wymaga dużo pisania ;) Może są jeszcze prostsze metody - chętnie się dowiem ;)

    0
  • #3 29 Gru 2011 12:04
    Alkaidek
    Poziom 10  

    Dzięki, przydało się i pomogło rozwiązać problem ;)

    0