411 REFERENCE · Wikibooks
DarkBASIC Programming/File Control & Data
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Day 12
Day 12 already, you're progressing towards a great career in programming
DarkBASIC and programming in general! Lots of people have trouble writing
files in DarkBASIC, and some have problems with Data types and more. This
lesson will take a lot of time to cover, I'm going to say 5 days for you and
about 2 weeks for me to write them. Hopefully, I'll get them done before but
if not well you just have to wait for me or another to contribute. Today,
we'll learn how to save a file.
Take for example this scenario
text$ = "Hey guess what open me up in notepad and see what happens!"
set dir "C:/"
if file exist("openmeupfast.txt") = 1
delete file "openmeupfast.txt"
endif
open to write 1,"openmeupfast.txt"
write string 1,text$
close file 1
open to read 1,"openmeupfast.txt"
read string 1,newtext$
Print newtext$
close file 1
wait key
end
What a mouth full! In machine language it takes several thousand lines
to do this same exact thing crazy or what! As you found out, the code
above creates a string variable, moves the directory we'll be working in
to c drive, if the file exist deletes it(or else we cannot overwrite it as
it already exists), writes the file, closes it, opens it to read the contents, uses a new string to contain the line of text, then Prints it and finally you have to press any key before it ends. Now that's great! But remember
the extension? You can change it to create your own files. You can also write
various things such as: bytes, characters, and so on. To see more of what
you can write view the command reference under the DarkBASIC help file. We'll just be using string for now and later byte.
This example will generate a syntax error and I'll tell you why now
a = 1
delete file "wrong.txt"
open to write 1,"wrong.txt"
write string 1,a
Remember numbers are not strings, to make a number a string we can do the following:
a = 1
a$ = str$(a)
b = val(a$)
The command str$ changes a number into a value, and the command val
changes a string into a value. There are many other odd things you can
do with strings as well which you can see under the DarkBASIC help file
command reference of strings. See some examples and change them around a bit.
Here's a useless kinda piece of software for strings
`Crazy Strings
`By Dbtutor
cls
message$ = "Hello World!"
Print "ASC() returns the ASCII number of the first letter in the str"
Print asc(message$)
Print "Len counts how many characters in a string"
Print len(message$)
Print "Mid gets the middle write characters of a string"
midval = 3
Print mid$(message$,midval)
Print "Here's the binary of the number 678"
Print bin$(678)
Print "Here's the hex of that number"
Print hex$(678)
Print "There are many more ways of destroying strings"
Print "Much are useless, but take a gander at them"
wait key
end
As you saw above manuiplating strings is easy but pretty much useless.
In some situations they are useful like a file manager tool which
we'll be making very soon along with some other file stuff. In the 2d
tutorial's final part we'll use files to make a very simple tool
very much like ZZT or MegaZeux. There's lots to cover so bear with me!
On day 13 we'll be learning more ways of writing files, remember byte?
Well you can use it to write a value to a file. I used txt has my
extension, try using .dat, .ini, etc. You can even make one up! Using write,
you can also write word or an integer value, a long or long integer value,
and even a float. Why I don't know.
Good Example of Writing A File:
a = 1
b$ = str$(a)
if file exist("a") = 1 then delete file "a"
open to write "a",1
write string 1,b$
close file 1
if file exist("a") = 1 then readit = 1
if readit = 1
open to read 1,"a"
read string 1,c$
d = val(c$)
Print d
Print "Same thing! Use val and str! Their better!"
wait key
end
endif
Note: from Cody Oebel
the above code fails to work properly, and will not compile and run.
I found the If file exist("a") = 1 ... the = 1 is ambiguous, and is not needed.
below is my version of this code snippet
`Edit by Cody C Oebel:
g = 11
set dir "c:/"
b$ = str$(g)
if file exist("a.txt") then delete file "a.txt"
open to write 1, "a.txt"
write string 1, b$
close file 1
if file exist ("a.txt")
open to read 1, "a.txt"
read string 1, z$
d = val(z$)
print d
print "This should work now, and is smaller amount of code"
wait key
endif
end
Now, see what I mean? Later we'll be using current directories and
file branching statements to make a simple file browser. Very simple!
Write byte is sometimes used for example in tilemappers and so on but the
standard is write string because it's simple. Remember keep it
simple stupid!
Let's write an array
dim a$(10)
a$(1) = "jsdakjlakljldsaf"
a$(2) = "ashjajasjhsjks"
save array a$(10),"array.ini"
load array a$(10),"array.ini"
for a = 1 to 10
Print a$(a)
next a
wait key
end
NOTE: Again this code above did not work: By Cody Oebel
Here is my working version for other readers to see the minor mistakes.
Also note at the bottom of the compiler it shows you the format
for save array, and load array e.g. Filename, array.
I also added the variable stringname filename$ to contain "array.ini"
dim a$(10)
filename$ = "array.ini"
a$(1) = "jsdakjlakljldsaf"
a$(2) = "ashjajasjhsjks"
set dir "c:/"
save array filename$, a$(10)
load array filename$, a$(10)
for a = 1 to 10
Print a$(a)
next a
wait key
end
Now we can save big ole arrays, database programming anyone?
Remember our guessing game? Go back and fix it up a bit so that you
can include this newly learned code in it. You've learned a lot about
files so far. Perpare for directories on Day 13!
Day 13
Day 13 arrived and we're only two days away from the half way point.
That's great news, as soon as you can be a master programmer in
DarkBASIC the better! Well, really DarkBASIC takes awhile to master, not
to scare you but I'm not a master programmer either. If you know somebody with
a good game it's usually not that they're the best programmer but
just a great game maker. Some DarkBASIC users have gone on to make
commercial games such as: Dumbo & Cool, Star Wraith, etc. DarkBASIC
is great for games and team efforts. Not so for applications as you'll
find out today.
Here's a simple file manager
Input "Set directory to: ";direct$
set dir direct$
You don't get to see files do you? We can easily view files and
whatever using some simple commands. Remember some are tedious, but
when in use with loops! Now this is a file manager, you change dirs,
view files, and whatnot, it's not a professional tool, it's showing you
the ropes. But before we do it's time to have a look at a better
file manager.
`Simple File Manager
`By Dbtutor
`Get the directory to use
setdirect$ = get dir$()
`Set the directory to the current directory
set dir setdirect$
`Current amount of items
items = 10
find first
Print get file name$(1)
for a = 2 to items
find next
Print get file name$(a)
next a
Wait key
end
Wow, that's cool and all but there's no user input and no file
manipulation dus this program is file system viewer. Just like
windows explorer! Really nowadays writing a file manager is pretty
much useless especially if it's ugly. But file managers in your program
in DarkBASIC allows better productivity then in typing in the file
name or directory and whatnot. We're not going back to the DOS days
God forbid type in a command and hope it works! Remember I said tedious?
Well there is a much better way to write the following program above. Don't
worry we'll be writing a file manager later! Before I show you a more
productive way.
Follow these instructions:
Go to http://www.computechtenerife.com/
Register as a user.
Click on Dark Basic Support and then Downloads
Scroll down and find the function libraries
Click on the Db file selector
Download and extract the files for usage later
Okay now that's done we can see a better way of doing things in
the file system viewer world. We're only a few blocks away from
the file manager.
`Simple File Viewer
`By Dbtutor
set dir "C:\"
Perform checklist for files
for a = 1 to checklist quantity()
Print checklist string$(a)
next a
Wait key
end
See how many lines less we have? There is other perform checklist for
things such as directories and devices. Go have a look and change
perform checklist for files command with a few of them.
Now remember that file manager library you downloaded, if you
haven't guessed we'll be modding some of the code inside the include
file(not the function library) to make our own modded file manager. Remember
the library is copyright to a DarkBASIC user known as TDK_MAN one of the
best DarkBASIC programmers out there besides you(just flattering) I'm sure
you could beat him at his game after 30 years. Just kidding if your reading
this TDK no offense. He's made lots of DarkBASIC programs including MatEdit
which we'll be using later on in the 3d chapters along with a 3d moddler and whatnot.
Here's the Source Code
`Thanks TDK For the Library Off your Site!
Rem Fileselector Function Demo - Copyright TDK_Man May 2003
Rem Modded Version By Dbtutor
gosub filemanager
filemanager:
#Include "FileSelect.dba"
Set Display Mode 800,600,16
Cls
Sync On
Rem Required DIM Statements At The Beginning Of Your Program
Dim Files$(1000,2): Dim Drv$(26): Dim Temp$(1000,2): Dim GotDrives(1)
Dim Path$(1): Dim Filename$(1): Dim SliderHeight(1): Dim FileOffset(1)
Title$="Load File": Rem Text to appear at top of fileselector
Filter$="*.*": Rem 3 char filter extension (Eg: 'TXT') or *.* for all files
CurDir$="C:\Program Files\Dark Basic Software": Rem Starting Directory
Rem Function Call
Selected=Fileselect(CurDir$,Title$,Filter$)
Rem On return Selected=1 if OK clicked and 0 if Cancel clicked
CLS
If Selected=1: Rem OK Was Clicked
Print "Selected Filename: ";Filename$(0)
Print "Selected Path: ";Path$(0)
`Modded Code here
Print "Press Any Key to Manage File"
wait key
myfile$ = filename$(0)
mydir$ = path$(0)
gosub managefile
Else: Rem Cancel Was Clicked
Print "Cancel Button Chosen"
Endif
`All Original Code Below
`By Dbtutor
managefile:
set dir mydir$
getext$ = left$(myfile$,4)
if getext$ = ".bmp" or ".jpg" then gosub view_bmp
if getext$ = ".mid" or ".wav" then gosub view_audio
view_bmp:
Load image myfile$,1
paste image 1,1,1
set cursor 1,400
wait key
cls
gosub filemanager
view_audio:
load music myfile$,1
play music 1
wait key
cls
gosub filemanager
There you are a easy file manager thanks to other peoples function
libraries! You can find lots on TDK's site(http://www.matedit.com/db.htm).
Along with tutorials for functions and more. That's all for Day 13, there
was no quiz for awhile so expect a lot of quizzes later on. I couldn't
find anything worth quizzing you on. There will be lotsa data going on
in Day 14.
Day 14
We already know what variables are, but you haven't used data
statements yet. Data statements work very easily, you just put
data, space and then put all the types of data.
Examples of Data
data "strings",12,5.6,"and integers and floats tooooooooooooooooo!!!!!!!"
data 12
data "string me"
data 5.50
You can have lots of data types in one statement as long as you
separate them with commas. That's useful but how can we read the data?
Well we can use read.
`Read Example
data 4
read var1
Print var1
You can use restore to reset the data pointer you'll see what I'm
talking about later. It's good practice to use different labels to
store different data.
`Big Data Example
gosub datastored
datastored:
data 1234
data 12
data 1
data 4
data 56
gosub readdata
readdata:
read var1
read var2
read var3
read var4
read var5
print var1
Print var2
Print var3
print var4
Print var5
First it stores data then reads it, you can do this backwards
if you want. Whichever way you read and store data it works. Now we're
into games, no explaining(well some) just pure games programming.
We'll program a game a day woohoo let's go now!