Strona główna » Poradniki » Maxima » Obsługa Plików
 

Obsługa Plików

Wstęp

Zapisywanie oraz odczytywanie plików upraszcza proces zapisu postępu prac w programie Maxima. Zaletą takiego rozwiązania jest fakt, że generowany jest plik tekstowy, który można otworzyć w wielu różnych programach. Nie można tego osiągnąć przy pomocy zapisywania projektu. Istnieje cały szereg różnych funkcji, który pozwala na zapisanie oraz odczytanie pliku.

Zapisywanie danych

W celu zapisanie danych można skorzystać z funkcji write_data. Funkcja ta przyjmuje dwa argumenty: pierwszy określa obiekt, który ma zostać zapisany, a drugi ścieżkę dostępu do pliku. Jako drugi argument można podać jedynie nazwę pliku. Wtedy plik zostanie zapisany w ścieżce domyślnej określonej przez folder instalacyjny lub będzie to folder gdzie został zapisany projekt.

Wprowadźmy do programu Maxima listę L := [1, 2, 3, 4, 5] oraz macierz M o rozmiarze 3×3, która w kolejnych wierszach ma kolejne liczby naturalne. Następnie zapiszmy obiekt L do pliku daneL.txt, a M do daneM.txt. Zadanie to realizuje poniższy kod:

(%i2)L: [1, 2, 3, 4, 5];
M: [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
(L)[1, 2, 3, 4, 5]
(M)[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
(%i3)write_data(L, "daneL.txt");
(%o3)done
(%i4)write_data(M, "daneM.txt");
(%o4)done

Pliki zostały zapisane poprawnie o czym świadczy komunikat "done" pod każdym zapisem. W wyniku działania kodu powstały dwa pliki tekstowe, które można otworzyć w zwykłym notatniku systemowym. W pliku daneL.txt został zapisany wektor:

  1. 1 2 3 4 5

Jak widać kolejne współrzędne wektora zostały oddzielone przy pomocy znaku spacji. Podobnie została zapisana macierz z tą różnicą, że kolejne wiersze macierzy zostały zapisane do kolejnych wierszy:

  1. 1 2 3
  2. 4 5 6
  3. 7 8 9

Na podstawie powyższych plików warto zauważyć, że w przypadku wprowadzania listy punktów należałoby utworzyć plik tekstowy w którym kolejne punkty byłyby zapisane w oddzielnych wierszach, a ich współrzędne powinny być rozdzielone spacją.

Odczytywanie danych

Do odczytywania danych przygotowano w programie Maxima kilka funkcji i każda inaczej interpretuje dane zapisane w pliku. Bardzo ważne, aby pamiętać, że np. zapisaną macierz w pliku można potraktować jako macierz, ale również jako wektor, gdzie należy zignorować wszystkie znaki nowej linii.

Wczytywanie listy

Najprostszą funkcją do odczytania danych jest funkcja read_list(), która przyjmuje tylko jeden argument nazwę pliku w którym lista została zapisana. Warto jednak zwrócić uwagę na to jak funkcja ta traktuje obydwa, wcześniej zapisane pliki:

(%i5)read_list("daneL.txt");
(%o5)[1, 2, 3, 4, 5]
(%i6)read_list("daneM.txt");
(%o6)[1, 2, 3, 4, 5, 6, 7, 8, 9]

Jak można zauważyć podczas wczytywania danych z pliku z zapisaną macierzą zostały skonwertowane na listę całkowicie ignorując podział na wiersze.

Wczytywanie macierzy

W celu wczytania macierzy należy użyć innej funkcji read_matrix() ponownie podając kolejny jedyny argument - nazwę pliku. Przykładowe zastosowanie wygląda następująco:

(%i7)read_list("daneM.txt");
(%o7)

Jak widać tym razem program poprawnie zintepretował dane wejściowe. Oczywiście należy pamiętać, że podczas wczytywania macierzy we wszystkich wierszach musi być identyczna liczba elementów. Inaczej Maxima zwróci błąd.

Lista zagnieżdżona

W przypadku, gdy jednak istnieje potrzeba wprowadzenia danych w wierszach o nierównej długości to można skorzystać z funkcji read_nested_list(). Każdy wiersz jest wtedy traktowany jako oddzielna lista, a wszystkie odczytane listy są umieszczane na liście wynikowej.

Przypuśćmy, że na dysku znajduje się plik "daneZ.txt", który wygląda następująco:

  1. 1
  2. 2 3
  3. 4 5 6

Wczytując ten plik przy pomocy funkcji read_nested_list() program zwróci:

(%i8)read_list("daneZ.txt");
(%o8)[[1], [2, 3], [4, 5, 6]]

Podsumowanie

Po dokładnym zapoznaniu się z powyższym artykułem obsługa plików nie powinna stanowić problemu. Warto nadmienić, że jest to jedynie wstęp i funkcje mają różne inne ustawienia i jest ich o wiele więcej. W celu utrwalenia materiału polecam wykonać zadania umieszczone w sekcji Zadania.

Zadania

Zadanie 1

Utwórz macierz 3×3, gdzie na pozycji i, j będzie stała wartość i·j2 i zapisz ją do pliku "dane.xyz". Następnie wczytaj dane na listę i podnieś każdy składnik do kwadratu. Otrzymaną listę zapisz tym razem do pliku "wynik.txt". Poprawnym wynikiem będzie:

  1. 1 4 9 16 64 144 81 324 729