Access

  MS Access 2010+  |  Przetwarzanie plików  |   VBA 7.0

• Jak pobrać plik lub jego fragment do zmiennej typu String.

Aby odczytać dane z pliku możemy pobrać jednorazowo jego całą zawartość do zmiennej typu String lub tablicy bajtów, możemy pobrać fragment pliku do zmiennej typu String lub tablicy bajtów, a także pobierać porcjami kolejne linie , lub kolejne „rekordy” do zmiennej „Typ użytkownika”.

Funkcja sprawdzająca argumenty otwarcia pliku.

Na stronie Walidacja argumentów otwarcia pliku przedstawiłem funkcję plikCheckArguments(...) sprawdzającą poprawnośc argumentów funkcji operujących na plikach tekstowych i binarnych. Nie jest to idealna funkcja uwzględniająca wszystkie przypadki nieprawidłowego otwarcia pliku, ale w większości przypadków umożliwia wychwycenie błędów podczas próby otwarcia pliku w trybie do „Do odczytu” lub „Do zapisu”.

Odczyt danych z pliku do zmiennej typu String.

Skoro mamy funkcję sprawdzającą poprawność argumentów, to napiszmy pierwszą funkcje, które z niej korzysta. Będzie nią funkcja plikFileToString(...) która pobiera do zmiennej typu String plik, lub fragment pliku.

⊗ Public Function plikFileToString( _
                   ByVal sFilePath As String, _
                   ByRef sRetString As String, _
          Optional ByVal lStart As Long = 1, _
          Optional ByVal lBytes As Long = -1) As Long
  • Funkcja plikFileToString (...) otwiera plik w trybie „Do odczytu” i pobiera kreśloną ilość bajtów lBytes, począwszy od startowego bajtu lStart. Zwraca ilość pobranych bajtów, a w argumencie ByRef sRetString As String zwraca pobrane bajty jako ciąg znaków.
  • argumenty:
    • sFilePath
    • pełna ścieżka do pliku, plik musi istnieć i nie może być otwarty na wyłączność.
    • sRetString
    • przekazywany ByRef argument, w którym zwracane są pobrane bajty. Przy niepowodzeniu wywołania funkcji zawiera ciąg zerowej długości "".
    • lStart
    • numer bajtu od którego ma nastąpić odczyt, domyślnie = 1.
    • lBytes
    • ilość bajtów do pobrania. Dla domyślnej wartości -1 pobierane są wszystkie bajty począwszy od początkowego bajtu startowego lStart. Jeżeli ilość bajtów do pobrania przekracza ilość dostępnych bajtów w pliku, funkcja zwraca wszystkie bajty począwszy od bajtu lStart, aż do końca pliku.
  • zwraca:
  • Przy powodzeniu zwraca wartość ilość pobranych bajtów,a w argumencie ByRef sRetString zwraca pobrane bajty. Przy niepowodzeniu zwraca -1, a w argumencie ByRef sRetString ciąg zerowej długości "". Jeżeli plik nie zawiera danych (jest pusty) funkcja zwraca 0, a w argumencie ByRef sRetString ciąg zerowej długości "".
  • autor: Zbigniew Bratko
  • data: 15.01.2018

  • Uwaga.
    Funkcja plikFileToString(...) korzysta z pomocniczej funkcji plikCheckArguments(...) sprawdzającej poprawność argumentów.
Option Compare Database
Option Explicit

Public Function plikFileToString( _
                 ByVal sFilePath As String, _
                 ByRef sRetString As String, _
        Optional ByVal lStart As Long = 1, _
        Optional ByVal lBytes As Long = -1) As Long '
Dim lLenFile      As Long
Dim ff            As Integer
Const cProcName   As String = "plikFileToString(...)"

	sRetString = ""

	' sprawdź, czy możliwy jest odczyt określonych bajtów z pliku
	If plikCheckArguments(sFilePath, False, lStart, lBytes, , cProcName) = False Then
		plikFileToString = -1
		Exit Function
	End If

	' pobierz długość pliku w bajtach
	lLenFile = FileLen(sFilePath)
			 
	' jeżeli plik jest pusty, to zakończ działanie
	If lLenFile = 0 Then
		plikFileToString = 0
		Exit Function
	End If

	' określ ilość bajtów do pobrania, począwszy od bajtu startowego
	If lBytes = -1 Then
		lBytes = lLenFile - lStart + 1
	Else
		' jeżeli ilość bajtów do pobrania, począwszy od bajtu startowego przekracza
		' rozmiar pliku, dostosuj ilość pobieranych bajtów do rozmiaru pliku
		If (lStart + lBytes) > lLenFile Then lBytes = lLenFile - lStart + 1
	End If

	'pobierz pierwszy wolny numer pliku
	ff = FreeFile

	' otwórz plik i pobierz dane
	Open sFilePath For Binary Access Read As #ff
		' przygotuj bufor na przyjęcie bajtów pliku
			sRetString = String(lBytes, vbNullChar)
			' pobierz określoną ilość bajtów do przygotowanego buforu
			Get #ff, lStart, sRetString
	Close #ff

	' zwróć ilość pobranych bajtów
	plikFileToString = lBytes

End Function

 

 
Akceptuję Polityka prywatności Tekst informacyjny o polityce Cookies