the put and get command put #1,record#, varible
i enter it put#1, array(x,y), array(x,y) and put#1,I,array(x,y)
and it doesn't except it
what is a correct way to enter it
saving to a file with a 2 dimential array using records
- burger2227
- Veteran
- Posts: 2466
- Joined: Mon Aug 21, 2006 12:40 am
- Location: Pittsburgh, PA
GET and PUT use a certain syntax. They can both be used when a file is Opened FOR RANDOM. They can only use ONE variable and you should start from record one when writing the file initially or leave the recordplace blank if consecutive :
Get #filenumber, recordplace, recordvalues ' reads a Random file
PUT #filenumber, recordplace, recordvalues ' writes data to file
PUT #1, 1, value%
An example of writing ONE value from each record. What LEN did you assign the file when opening it? An Integer is 2 bytes.
OPEN filename$ FOR RANDOM AS #1 LEN = 2
If you are using just one Integer value per record, then you could hold
100 records in a 200 byte file. Use LOF(1) \ LEN(record) to find the number of records already entered. The SEEK function and statement can find and move to places in a file.
If you are using more than one value, use a TYPE Declaration to Get or PUT all of the values at once. You cannot use an Array inside the TYPE!
TYPE RecordType
First AS INTEGER '2 bytes
Second AS INTEGER '2 bytes
END TYPE
DIM SHARED Records AS RecordType 'shared passes to SUB programs
Required to use the one variable to hold more than one. Then you use DOT variables to hold each piece of information.
Records.First = Array(1, x)
Records.Second = Array(2, y)
PUT #1, 1, Records ' places both pieces of data in the record.
Ted
Get #filenumber, recordplace, recordvalues ' reads a Random file
PUT #filenumber, recordplace, recordvalues ' writes data to file
PUT #1, 1, value%
An example of writing ONE value from each record. What LEN did you assign the file when opening it? An Integer is 2 bytes.
OPEN filename$ FOR RANDOM AS #1 LEN = 2
If you are using just one Integer value per record, then you could hold
100 records in a 200 byte file. Use LOF(1) \ LEN(record) to find the number of records already entered. The SEEK function and statement can find and move to places in a file.
If you are using more than one value, use a TYPE Declaration to Get or PUT all of the values at once. You cannot use an Array inside the TYPE!
TYPE RecordType
First AS INTEGER '2 bytes
Second AS INTEGER '2 bytes
END TYPE
DIM SHARED Records AS RecordType 'shared passes to SUB programs
Required to use the one variable to hold more than one. Then you use DOT variables to hold each piece of information.
Records.First = Array(1, x)
Records.Second = Array(2, y)
PUT #1, 1, Records ' places both pieces of data in the record.
Ted
Last edited by burger2227 on Sun Dec 07, 2008 11:07 pm, edited 3 times in total.
I had a little trouble with putting in the code. I'd kludge it by treating it as a linear array.
Like this:
*Note: I looked at the output, and it was fine. I changed the code a little bit though.
[edit]It looks like Burger has it better.
Like this:
Code: Select all
'The "size" of our 2d array
const arrayWidth = 12
const arrayHeight = 11
'our arrays
dim my2dArray(1 to arrayWidth, arrayHeight) as integer
dim my1dArray(1 to arrayWidth * arrayHeight) as integer
'...
'Code for doing stuff with putting stuff in 2d array
'...
'Now that we want to ship the bugger out
for i = 1 to arrayWidth
for j = 1 to arrayHeight
'Stuff the 1d array
my1dArray(i + (j-1) * arrayWidth) = my2dArray(i, j)
next j
next i
'To the file
open "myFile.dat" for binary as #1
for i = 1 to arrayWidth * arrayHeight
put #1, i * 2, my1dArray(i)
next i
'Now that the party is over
close #1
end
[edit]It looks like Burger has it better.
For any grievances posted above, I blame whoever is in charge . . .
putting records into a 2d, random file
this isn't the whole program the rest uses the 26 for the alphabet
to sort the names
TYPE people
name AS STRING * 30
job AS STRING * 30
age AS STRING * 3
END TYPE
10 CLS
DIM SHARED ray(26, 2) AS people
OPEN "c:\docume~1\publib2\desktop\store.data" FOR RANDOM AS #1 LEN = LEN(ray(o%, p%))
FOR o% = 1 TO 6
DATA a,b,c,d,e,f,g,h,i,j,k,l
FOR p% = 1 TO 2 '...PUTTING 0 IN A TWO DIMENTIONAL ARRAY
IF p% = 2 THEN GOTO 30
READ a$
'PRINT p%
ray(o%, p%).name = a$
ray(o%, p%).job = "0"
ray(o%, p%).age = "0"
'PRINT ray(o%, p%).name;
PUT #1, o%, ray(o%, p%)
GOTO 40
30 READ a$
ray(o%, p%).name = a$
ray(o%, p%).job = "0"
ray(o%, p%).age = "0"
PUT #1, p%, ray(o%, p%)
GET #1, o%, ray(o%, p%)
PRINT ray(o%, p%).name;
GET #1, p%, ray(o%, p%)
PRINT ray(o%, p%).name;
40 NEXT p%
SLEEP 1
NEXT o%
CLOSE #1
KILL "c:\docume~1\publib2\desktop\store.data"
END
to sort the names
TYPE people
name AS STRING * 30
job AS STRING * 30
age AS STRING * 3
END TYPE
10 CLS
DIM SHARED ray(26, 2) AS people
OPEN "c:\docume~1\publib2\desktop\store.data" FOR RANDOM AS #1 LEN = LEN(ray(o%, p%))
FOR o% = 1 TO 6
DATA a,b,c,d,e,f,g,h,i,j,k,l
FOR p% = 1 TO 2 '...PUTTING 0 IN A TWO DIMENTIONAL ARRAY
IF p% = 2 THEN GOTO 30
READ a$
'PRINT p%
ray(o%, p%).name = a$
ray(o%, p%).job = "0"
ray(o%, p%).age = "0"
'PRINT ray(o%, p%).name;
PUT #1, o%, ray(o%, p%)
GOTO 40
30 READ a$
ray(o%, p%).name = a$
ray(o%, p%).job = "0"
ray(o%, p%).age = "0"
PUT #1, p%, ray(o%, p%)
GET #1, o%, ray(o%, p%)
PRINT ray(o%, p%).name;
GET #1, p%, ray(o%, p%)
PRINT ray(o%, p%).name;
40 NEXT p%
SLEEP 1
NEXT o%
CLOSE #1
KILL "c:\docume~1\publib2\desktop\store.data"
END