Free Basic中的输入数组

时间:2012-02-15 13:43:59

标签: arrays io freebasic

现在,我正在通过 Free Basic 进行编程,我正在寻找一种方法来获取数组的值

例如,如果我想在一行中得到一个数组的2个整数,我写这个:

Dim a(2) as integer
Input a(1),a(2)

但我的程序应该从用户那里获得数组长度。

这是我的计划:

dim length as integer
input "Enter Array length: ",length
dim a(length) as integer
dim i as integer
for i=1 to length
input a(i)
next
'OTHER CODES...

但是这个程序在多行中获取数组值。问题就在这里。我想把它带到单行,但我不知道“我应该做什么?”

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

你必须输入一个“字符串”,然后将字符串拆分为给定值的数量。

答案 1 :(得分:1)

是的。最好的方法可能是抓住整个字符串并自己解析数字。但为此,您需要使用line input而不是input,因为input只会在第一个逗号之前返回字符串,其中line input将返回整个字符串。

不幸的是,FreeBasic的弱点是字符串解析,因此您需要使用库或构建自己的函数来解析数字。这是一个例子:

declare sub explode_to_integers(s as string, a() as integer, delimiter as string=",")

sub explode_to_integers(s as string, a() as integer, delimiter as string = ",")
    dim i as integer
    dim idx as integer = 0
    while len(s)
        if idx > ubound(a) then
            redim preserve a(idx) as integer
        end if
        i = instr(s, delimiter)
        if i then
            a(idx) = cast(integer, left(s, i-1))
            s = right(s, len(s)-i)
        else
            a(idx) = cast(integer, s)
            s = ""
        end if
        idx += 1
    wend
end sub

你可以像这样使用它:

dim numbers as string
redim a() as integer

line input "Enter numbers: ", numbers

explode_to_integers(numbers, a()) '// split string by comma and put values into a()

dim i as integer
for i = 0 to ubound(a)
    print a(i)
next i
end

确保在声明数组时使用redim,因此可以在运行时调整数组大小。

答案 2 :(得分:1)

如果您的输入是所有数字(不带逗号)和/或文字没有引号,那么它非常简单:

Dim as integer x,x1,y,y1    
Dim as string string1,string2

print "Be sure to use commas between values, if you need a comma in a string,"  
print "use double quotes around the string."
Input "Enter x,x1,string1,y,y1,string2", x,x1,string1,y,y1,string2

如果您需要阅读大多数CSV文件,同样的技术也能很好地工作。

Input #filehandle, x,x1,string1,y,y1,string2

请注意,这不会处理字符串中的嵌入式引号,它会在第二个双引号处截断字符串,而不是在下一个未引用的逗号中截断。

换句话说,如果您:input #1, string1,x

,文件包含

"hello"world", 2

你只会得到你好,2回来。 (截至FB v 1.01) 我认为这是一个错误,因为你可以在其他地方使用嵌入式引号的字符串。

顺便说一句,编写CSV文件很容易使用:

Write #filehandle, x,x1,string1,y,y2,string2

希望这有帮助,我在其他几个地方看到了同样的问题。