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.

visual basic - filtrowanie zawartości pliku na podstawie innego

wabikboy 08 Mar 2016 00:02 594 7
  • #1 08 Mar 2016 00:02
    wabikboy
    Poziom 16  

    Witam

    Prosił bym o wsparcie, w jaki sposób w visual basic mogę filtrować plik za pomocą innego pliku.
    np wczytuję plik wzorzec

    banany
    pomarańcze
    truskawki
    cytryny
    jabłka

    i drugi plik

    pomarańcze 200kg
    jabłka 133kg
    cytryny 50kg
    truskawki 23kg
    banany 125kg
    mandarynki 18kg
    marchewki 30kg
    itd ...

    Chodzi dokładnie o to aby wyświetlić tylko te pozycje z drugiego pliku które znajdują się w pliku wzorca.

    0 7
  • #2 08 Mar 2016 00:07
    marcinj12
    Poziom 40  

    Z jakiego środowiska do Visual Basica korzystasz?

    0
  • #3 08 Mar 2016 00:09
    wiesniak
    Poziom 31  

    Jaki VB? VB6, VB.NET czy może VBA?
    Jeśli ten .NETowy, to proponuję wczytać plik wzorca do HashSet, a czytając drugi plik sprawdzać każdorazowo czy dane słowo występuje we wcześniej stworzonej kolekcji HashSet (metoda Contains).

    0
  • #4 08 Mar 2016 07:38
    wabikboy
    Poziom 16  

    Od razu dziękuję za zainteresowanie.
    Korzystam z visual studio 2010

    0
  • #5 09 Mar 2016 13:32
    wabikboy
    Poziom 16  

    Doszedłem do takiego stanu:
    lecz nie mogę ogarnąć pętli w pętli

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    pierwsza pętla wykonuje się tylko raz i jak by się zatrzymywała

    0
  • #6 09 Mar 2016 14:56
    marcinj12
    Poziom 40  

    Dlaczego nie zastosowałeś porady kolegi z użyciem HashSeta? Było by bardziej optymalnie.
    Zamiast tablicy o stałej długości już lepiej użyć List<string> i metody Add...
    A błąd masz dlatego, że zagnieździłeś pętle. Po dojściu na koniec pliku 1 kursor nie wraca na początek, dlatego pętla się nie wykonuje. Rozwiązanie: nie zagnieżdżaj pętli, w pierwszej wczytaj dane do listy, w drugiej - sprawdzaj i dodawaj do DGV.

    0
  • #7 09 Mar 2016 15:33
    wabikboy
    Poziom 16  

    Nie zastosowałem HashSet gdyż IntStr wydał mi się bardziej wygodny ponieważ szuka ciągu znaków w taki sposób jak mi jest potrzebny chociaż nie zagłębiałem się w działanie HashSet.
    Poradziłem sobie z tym kodem i działa tylko potrzebuję jeszcze porady jak wyciągnąć informacje o długości tablicy bo chcę aby pętla FOR wykonała się do końca tablicy

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #8 09 Mar 2016 15:49
    marcinj12
    Poziom 40  

    marcinj12 napisał:
    Zamiast tablicy o stałej długości już lepiej użyć List<string> i metody Add...
    A poza tym polecam zapoznanie się z funkcją File.ReadAllLines - jedną linijką można odczytać cały plik od razu do tablicy.
    https://msdn.microsoft.com/pl-pl/library/s2tt...?cs-save-lang=1&cs-lang=vb#code-snippet-1
    PS1. W pętli for nie inkrementujesz już samemu y = y + 1
    PS2. Po znalezieniu dopasowania można przerwać dalszą część pętli bodaj przez Exit For

    0