Lingo Tutorial: Reading from and Saving into External Files READING: Director FileIO Extra; Maricopa Tips n' Scripts File "field.dir"Sometimes you need to have your program read or write to an external file (to save your notes, to keep the state of your game, etc.) To accomplish this, you need to use some of the extra functionality provided by "plug-ins" written in other languages (such as C, Java, etc) for Director. These plug-ins are called xtra's. The director file shows how to save text from a field (which may contain user notes, for example) and show it up again at another place. (The second field could be different than the first, in general.) It is always a good idea to initialize your fields: on startMovie member("my notes").text = "" -- clear the field member("my notes").font = "Times" member("my notes").fontSize = 18 endRemembering the contents of the field is done though the use of a global variable and the script: global notes notes = member("my notes").text -- keep the field contents in a global variable So, when we reach frame "other" we can remember what the field contained. Next, we will save the content of this field inside a file we created for this purpose. File "save_in_file.dir" This program saves the contents of the field "my notes" in a file called "Saved_Notes.txt", in the same directory as the program. Quite useful for saving the status of a game or other information. -- This saves the notes onto a file upon stopping the movie on stopMovie global notes -- WRITE THE DATA INTO A FILE scribe = new (xtra "FileIO") myFileName = "Saved_Notes.txt" -- put myFileName scribe.createFile(the moviePath & myFileName) scribe.openFile(myFileName, 0) scribe.writeString (string (notes)) -- will write on top of any existing file scribe.closeFile() put "FILE WRITTEN" -- END OF FILE GENERATION end stopMovie And this loads the notes from a file upon starting the movie on startMovie global notes member("my notes").text = "" -- clear the field member("my notes").font = "Times" member("my notes").fontSize = 18 -- READ THE DATA FROM A FILE INTO A STRING VARIABLE scribe = new (xtra "FileIO") myFileName = "Saved_Notes.txt" -- we hope the file to exist scribe.openFile(the moviePath & myFileName, 0) -- open for reading and writing if (status(scribe) <> -37) then -- if the file was found notes = scribe.readFile() put "FILE READ: " & notes else notes = "" put "FILE NOT FOUND" end if scribe.closeFile() -- END OF FILE READING end startMovie NOTE: You can change the file name to whatever you want. But be warned: If the file name you are trying to save in cannot be handled by the OS, (because it is, say, too long) the file will be lost... Saving the state of a game One useful application of the FileIO xtra is to use it so that a user can save a game she is playing for later. You can practice by augmenting this version of a 2-level memory game so that it saves the game and it is available to play it next time. Note: it requires that you refresh your memory on String manipulation. (Here is a version that saves the easy-level game. Saving the tough-level game is left as an exercise.) Finally, let us have the user choose which file she wants to read in. File "read_from_chosen_file.dir"This allows the user to read in from any file on the hard disk. -- This loads the notes from a file upon starting the movie on startMovie global notes member("my notes").text = "" -- clear the field member("my notes").font = "Times" member("my notes").fontSize = 18 -- READ THE DATA FROM A FILE INTO A STRING VARIABLE scribe = new (xtra "FileIO") myFileName = displayOpen(scribe) -- Display Open Dialog and return the fileName if myFileName = "" then -- no file was chosen alert("You did not chose a file, so I will try to open the default one") myFileName = "Saved_Notes.txt" -- open this by default (still might not exist) scribe.openFile(the moviePath & myFileName, 0) -- open for reading and writing if (status(scribe) <> -37) then -- if the file was found notes = scribe.readFile() put "FILE READ: " & notes else notes = "" put "FILE NOT FOUND" end if else -- a file was chosen alert("You chose to open file " & myFileName) scribe.openFile(myFileName, 0) -- open for reading and writing notes = scribe.readFile() put "FILE READ: " & notes end if scribe.closeFile() -- END OF FILE READING member("my notes").text = notes -- just to show what I read end startMovie Now change the stopMovie script to also save notes into a selected file.
|
|
Maintained By: Takis Metaxas
|