Kurs QBasic - część 9
Działania na plikach - zapis i odczyt danych z dysków
Nadszedł czas na zapoznanie się z poleceniami odpowiedzialnymi za zapis i odczyt danych. Na początek zaczniemy od przykładu programu umożliwiającego zapis danych na dysku twardym.
10 REM Prg9.1 Zapis danych na dysku twardym 20 CLS 30 INPUT " Podaj nazwe pliku:"; plik$ 40 INPUT " Podaj tekst, ktory ma zostac w nim zapisany"; tekst$ 50 OPEN plik$ + ".txt" FOR OUTPUT AS #1 60 PRINT #1, tekst$ 70 CLOSE 1
Linie 10 - 40 powinny być zrozumiałe. W linii 50 otwieram (polecenie OPEN) kanał nr.1 przeznaczony do zapisu danych, o czym informuje człon FOR OUTPUT AS #1. W tej samej linii łączę kanał nr.1 z plikiem podanym przez użytkownika (plik$) i dodaje do nazwy pliku człon "txt". Jak wiadomo każdy plik powinien mieć jakieś rozszerzenie. Ja zdecydowałem się na txt, jednak nic nie stoi na przeszkodzie, aby wybrać inne rozszerzenie. W linii 60 za pomocą polecenia PRINT #1 łączę się z kanałem nr.1 i wysyłam dane "tekst$" do wcześniej utworzonego pliku. Jeżeli chcesz zapisać więcej danych, możesz je oddzielić przecinkami, lub dodać większą ilość PRINT #1. W linii 70 zamykam otwarty kanał (polecenie CLOSE 1). Analogicznie sytuacja wygląda z odczytem danych:
10 REM Prg9.2 Odczyt danych z dysku twardego 20 CLS 30 INPUT " Podaj nazwe pliku:"; plik$ 40 OPEN plik$+".txt" FOR INPUT AS #1 50 INPUT #1, tekst$ 60 CLOSE 1 70 PRINT" Odczytano plik i pobrano nastepujace dane: ";tekst$
i dlatego podaruję sobie komentarz. Poniżej przedstawiam jeszcze jeden, troszkę bardziej złożony przykład:
10 REM Prg9.3 Zapis i Odczyt danych z dysku twardego 20 CLS 30 REM tworze plik z przykladowymi danymi 40 OPEN "temp.txt" FOR OUTPUT AS #1 50 FOR a = 1 TO 10 60 PRINT #1, "To jest"; a; "linijka tekstu" 70 NEXT a 80 CLOSE 1 90 REM teraz odczytuje plik "temp.txt" i rownolegle zapisuje 100 REM jego zawartosc do pliku "kopia.txt" 110 OPEN "temp.txt" FOR INPUT AS #1 120 OPEN "kopia.txt" FOR OUTPUT AS #2 130 FOR a = 1 TO 10 140 INPUT #1, tekst$ 150 PRINT #2, tekst$ 160 NEXT a 170 CLOSE 2 180 CLOSE 1 190 PRINT " Dane skopiowane prawidlowo."
W liniach 40 - 80 tworzę nowy plik "temp.txt" i uzupełniam go treścią "To jest 'a' linijka tekstu". Następnie w liniach 110 - 180 tworzę dwa równoległe kanały - pierwszy do odczytu, drugi do zapisu - i rozpoczynam równoległą transmisję danych. W tym przykładzie chciałem zwrócić uwagę na to, że można używać jednego kanału kilka razy w programie, jednak nigdy nie można otworzyć tego samego kanału, jeżeli wcześniej nie został on zamknięty. Dlatego właśnie w liniach 110 i 120 utworzyłem dwa różne kanały.