Skocz do zawartości

Zapis tablicy do pliku


peterz_pl

Rekomendowane odpowiedzi

Cześć,

 

Posiadając w swojej grze tablicę z danymi, chciałbym ją zapisać do pliku zewnętrznego, aby przy kolejnym uruchomieniu została z tego pliku z powrotem wczytana. Czego najlepiej w tym przypadku użyć?

 

W swojej grze mam skrypt otwierający pliki csv (wartości są wczytywane do tablicy). Niestety mam problem z jego zapisywaniem, więc pytam was czy jest na to jakiś lepszy sposób?

 

Z góry dzięki ludkowie.

Odnośnik do komentarza
Udostępnij na innych stronach

Ogółem tablice są wolniejsze w GMie od struktur danych. Jeżeli jest to tablica jednowymiarowa to zamień ją na ds_list jeżeli dwuwymiarowa to zamień na ds_grid.

 

ds_list i ds_grid mają wbudowaną funkcję zapisu i odczytu na dysk. W dodatku można ich używać podobnie jak tablic stosując Accesory: http://docs.yoyogames.com/source/dadiospic.../accessors.html

 

dla listy będzie to wyglądało tak:

GML
lista[| index] = wartosc; // zapis

wartosc = lista[| index]; // odczyt

dla grida

GML
grid[# index1, index2] = wartosc; // zapis

wartosc = grid[# index1, index2]; // odczyt

 

funkcje do zapisu/odczytu na dysk:

GML
ds_list_write(id);

ds_list_read(id, str);

ds_grid_write(id);

ds_grid_read(id, str);

 

Korzyści z używania tego jest więcej niż z tablic ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Żadnego pliku w GM:S nie można odczytywać i zapisywać w dowolne miejsce na dysku chyba że użytkownik wskaże to miejsce przy pomocy funkcji get_open_filename(), get_save_filename().

 

A co do tego jak są zapisane dane:

NOTE: The returned string is not a human readable string, but rather a dump of the contents of the data-structure
Odnośnik do komentarza
Udostępnij na innych stronach

ds_grid bardzo fajne, będę korzystał.

 

Może rozwijając powyższy temat, potrzebuję, żeby plik z danymi mógł być wczytywany przez kilka komputerów. Podpowiedzcie proszę jak najlepiej to zrobić. Czy GM:S może przykładowo skopiować plik zapisywany w appdata/local/gra do wyznaczonego miejsca na dysku (get_save_filename())?

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli nie chcesz, żeby user musiał ręcznie wybierać lokalizacje pliku - GM nie może zapisywać poza appdata przez sandboxowanie robione niby z powodu innych targetów (iOS/Android/HTML5). Dodaj do projektu extension GMFileSystem. To DLL wiec ograniczy eksport to windy.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli nie chcesz, żeby user musiał ręcznie wybierać lokalizacje pliku - GM nie może zapisywać poza appdata przez sandboxowanie robione niby z powodu innych targetów (iOS/Android/HTML5). Dodaj do projektu extension GMFileSystem. To DLL wiec ograniczy eksport to windy.

Siedzę nad tym od 3 dni i nie potrafię. Próbuję ustalić folder zapisu, ale to nic nie daje.

GML
FS_set_gm_save_area("C:\Users\??\Desktop")

A poniżej kod do zapisu do CSV. Chociaż równie dobrze można tą tablicę2d zapisywać do innego formatu. Z tym niestety u mnie jeszcze gorzej.

Temat chyba do zamknięcia, niestety nie potrafię tego ogarnąć.

GML
///csv_save(filename, array, _sep)

/***************************************************

Loads in an included .csv file

 

argument0 - The filename of the .csv

argument1 - The array to be converted to a .csv

argument2 (Optional) - The seperator being used if not ","

 

returns: N/A

***************************************************/

 

var fname = argument[0]; // The filename you want to use

var arr_tmp = argument[1]; // The array you want to save as a .csv

var file; // Stores the file id

var str = ""; // Temp store the string as it is being complied

// Select the seperator being used

if (argument_count > 2)

var sep = argument[2]; // Use custom seperator

else

var sep = ";"; // Default seperator

file = file_text_open_write(string(fname) + ".csv"); // Open or create the .csv

for (i = 0; i < array_height_2d(arr_tmp); i++) {

str = "";

 

// Compile the string to be written

for (var j = 0; j < array_length_2d(arr_tmp, i); j++) {

str += string(arr_tmp[i, j]);

str += sep;

}

str = string_delete(str,string_length(str),1); // Remove the seperator at the end of the string

file_text_write_string(file, str); // Write the string to the file

file_text_writeln(file); // Insert an endline character

}

 

file_text_close(file); // Close the file

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...