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] Funkcja FILEGET.

koczis_ws 09 Lut 2010 14:47 1698 5
  • #1 09 Lut 2010 14:47
    koczis_ws
    Poziom 24  

    Witam
    Zaczynam się zajmować VisualBasic'em od niedawna. Wcześniej programowałem w Turbo Basic i QBasic pod DOS em.
    Konieczność zmusiła mnie do przerobienia starych programików z DOSa na Windows, gdyż nie chcą chodzić pod WINDOWS 7, a używanie DOS emulatora jest upierdliwe.
    W zasadzie wiele udało się przerobić ale stanąłem przed problemem. Chodzi o obsługę plików w trybie binarnym. W VB 2008 jest to całkowicie przerobione i nie mogę sobie z tym poradzić. Program w ogóle nie chce czytać danych z pliku, albo czyta tylko pierwszy znak i nie zmienia pozycji w pliku po SEEK albo czyta tylko pierwsze 8 znaków.
    Będę wdzięczny za jakiś dokładny opis działania funkcji FILEGET bo może tutaj coś robię źle.
    Pozdrawiam
    edit:
    Dla zobrazowania problemu załączam fragment programu, który ma odczytać dane z pliku binarnego i zapisać do zmiennej tekstowej x.

    Code:
    FileOpen(1, plik, OpenMode.Binary)
    
            Seek(1, 1)
            x=""
            DlugoscPliku = LOF(1)
              FOR parI =1 TO DlugoscPliku
              Seek(1, parI)
              FileGet(1, xx ,1)
              x = x + xx
            NEXT parI
        MsgBox(DlugoscPliku & ":" & x)
    FileClose(1)

    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    0 5
  • #2 17 Lut 2010 10:21
    koczis_ws
    Poziom 24  

    Hmm ... czyżby nikt nie robił takich rzeczy.
    Ja już nie wiem co robić. Przestudiowałem różne helpy na różnych stronach, kompinowałem na różne sposoby z parametrami i deklaracjami i nic.
    Czyta tylko pierwsze 8 znaków pliku pomimo, że z wartości zmiennej parI wynika , że "przeleciał" przez cały plik.
    Nadmieniam, że w Turbo BASICu była funkcja GET i ten program działał perfekcyjnie.

    0
  • #3 17 Lut 2010 12:08
    PanBo
    Poziom 16  

    Plik binarny a zapamiętujesz zawartość w stringu? Jakiego typu jest xx? Wklej tyle kodu żeby dało się sprawdzić działanie.
    Jeśli chcesz tylko odczytać całość to można uprościć:

    Code:
    Dim bytes = System.IO.File.ReadAllBytes("plik")
    
    Dim text = System.IO.File.ReadAllText("plik")

    0
  • #4 17 Lut 2010 20:28
    koczis_ws
    Poziom 24  

    Przeniesienie zawartości pliku do zmiennej jest tylko testem działania po nieudanych próbach przetworzenia kodu z TurboB na VB.
    Główną funkcją programu jest wyszukanie w pliku odpowiedniego ciągu znaków i zastąpienie go innym, wygenerowanym przez moduł obliczeniowy.

    0
  • #5 17 Lut 2010 22:09
    PanBo
    Poziom 16  

    Code:
    Dim xx As Byte
    
    ...
    FileGet(1, xx)
    x = x + " " + xx.ToString("X2")
    tak działa ok

    0
  • #6 18 Lut 2010 12:17
    koczis_ws
    Poziom 24  

    Problem rozwiązany.
    Cała sprawa w deklaracji zniennych. Jeśli chcemy z pliku binarnego wyciąć łańcuch określonej długości to musimy zdeklarować zmienną typu string użytą w FileGet o odpowiedniej długości , a nie tak jak w TB podać długość łańcucha w funkcji GET.

    0