Author |
Topic: passing arrays to subs (Read 275 times) |
|
Alincon
Full Member
member is offline
Posts: 147
|
|
passing arrays to subs
« Thread started on: Jul 9th, 2017, 4:17pm » |
|
I need to load about 20 small tables at the beginning of my program. How can I pass array names, one at a time, to the sub, instead of using 20 if statements, as I have done here? r.m.
Code:
open "C:\LibBas\_MyLibBas\matchmaker\tables.txt" for input as #tbl
for j = 1 to 3
call getTables j
next
close #tbl
end
sub getTables j
input #tbl,x$
n=1
while word$(x$,n) <> ""
if j = 1 then religion$(n) = word$(x$,n)
if j = 2 then race$(n) = word$(x$,n)
if j = 3 then pet$(n) = word$(x$,n)
' 17 more ifs
n=n+1
wend
end sub
Tables.txt: Code:
Buddist Catholic Muslim Mormon Protestant Other None
White Black Asian Polynesian Hispanic
Birds Cats Dogs Fish
|
|
Logged
|
|
|
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
Re: passing arrays to subs
« Reply #1 on: Jul 9th, 2017, 7:29pm » |
|
Passing arrays to SUBs and FUNCTIONs
which gives us Code: open "C:\progs\LBB\tables.txt" for input as #tbl
' for j = 1 to 3
' call getTables j
' next
call getTable religion$()
call getTable race$()
call getTable pet$()
close #tbl
call showArray religion$()
call showArray race$()
call showArray pet$()
end
sub getTable arr$()
input #tbl,x$
n=1
while word$(x$,n) <> ""
arr$(n) = word$(x$,n)
n=n+1
wend
end sub
sub showArray arr$()
for i = 1 to 10
print arr$(i);" ";
next
print
end sub
sub getTables j
input #tbl,x$
n=1
while word$(x$,n) <> ""
if j = 1 then religion$(n) = word$(x$,n)
if j = 2 then race$(n) = word$(x$,n)
if j = 3 then pet$(n) = word$(x$,n)
' 17 more ifs
n=n+1
wend
end sub
|
|
Logged
|
|
|
|
Alincon
Full Member
member is offline
Posts: 147
|
|
Re: passing arrays to subs
« Reply #2 on: Jul 9th, 2017, 11:45pm » |
|
Too bad this does not work. I have to make 20 call statements. Code:
tableName$(1)="religion$()":tableName$(2)="race$()":tableName$(1)="pet$()"
for j = 1 to 3
call getTable tableName$(j)
next
|
|
Logged
|
|
|
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
Re: passing arrays to subs
« Reply #3 on: Jul 10th, 2017, 06:47am » |
|
Search turned this thread array operations
With that, we have Code:tableName$(1)="religion$"
tableName$(2)="race$"
tableName$(3)="pet$"
open "C:\progs\LBB\tables.txt" for input as #tbl
for j = 1 to 3
call getTable tableName$(j)
next
close #tbl
call showArray religion$()
call showArray race$()
call showArray pet$()
print "--------------"
end
function assignStr(byref a$, b$)
a$ = b$
end function
sub getTable arrName$
input #tbl,x$
n=1
while word$(x$,n) <> ""
value$=word$(x$,n)
'print "FNassignStr(";arrName$;"(";n;"),value$)"
dummy = eval("FNassignStr(";arrName$;"(";n;"),value$)")
n=n+1
wend
end sub
sub showArray arr$()
for i = 1 to 10
print arr$(i);" ";
next
print
end sub
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: passing arrays to subs
« Reply #4 on: Jul 10th, 2017, 08:25am » |
|
on Jul 9th, 2017, 11:45pm, Alincon wrote:Too bad this does not work. I have to make 20 call statements. |
|
Assigning the 20 array names to the elements of tableName$() is just as much code as making 20 call statements, probably more! In fact from a code readability standpoint I would have thought that the multiple call statements were clearer. So I'm not sure that I can see what the benefit would be in this particular case.
Richard.
|
|
|
|
Alincon
Full Member
member is offline
Posts: 147
|
|
Re: passing arrays to subs
« Reply #5 on: Jul 10th, 2017, 2:20pm » |
|
I have made some progress, but still not what I want: Code:
'tables.txt now includes the array names on a separate line before the array items
open "C:\LibBas\_MyLibBas\matchmaker\tables.txt" for input as #tbl
for j = 1 to 4
input #tbl, xx$ 'get array name
print xx$
call getTable xx$()
next
for j = 1 to 7 'checking the arrays
print j,religion$(j),race$(j),pet$(j),television$(j) 'shows only blanks
next
close #tbl
end
sub getTable arr$()
input #tbl,x$ 'get array item
n=1
while word$(x$,n) <> ""
arr$(n) = word$(x$,n) 'this seems to work
print, arr$(n) 'show the array item
n=n+1
wend
end sub
revised tables.txt file: Code:
religion$
Buddist Catholic Muslim Mormon Protestant Other None
race$
White Black Asian Polynesian Hispanic
pet$
Birds Cats Dogs Fish
television$
Drama Comedy Game Cops Mystery Sci-Fi Reality
r.m.
|
|
Logged
|
|
|
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
Re: passing arrays to subs
« Reply #6 on: Jul 10th, 2017, 3:00pm » |
|
Alincon, I wonder if you actually READ answers?
use sub getTable arrName$ / function assignStr(byref a$, b$) from Reply#3.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: passing arrays to subs
« Reply #7 on: Jul 10th, 2017, 4:00pm » |
|
on Jul 10th, 2017, 2:20pm, Alincon wrote: I would suggest you step back and consider an alternative way of handling this. For example could not the category names like 'religion', 'race' etc. themselves be data items? Something like this:
Code:category$(1) = "religion" : category$(2) = "race" : category$(3) = "pet"
count(1) = 7 : count(2) = 5 : count(3) = 4
name$(1,1) = "Buddist" : name$(1,2) = "Catholic" : ... etc.
name$(2,1) = "White" : name$(2,2) = "Black" : name$(2,3) = "Asian" : ... etc.
name$(3,1) = "Bird" : name$(3,2) = "Cat" : name$(3,3) = "Dog" : ... etc. Now everything is in three arrays: category$(), count() and name$() and you should be able to do whatever you want using indexing.
Richard.
|
|
Logged
|
|
|
|
|