0

現在、 Free Basicでプログラミングを行っており、配列の値を1 行で取得する方法を探しています。

たとえば、配列の 2 つの整数を 1 行で取得する場合は、次のように記述します。

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...

しかし、このプログラムは配列の値を複数行で取得します。問題はまさにここにあります。1行にまとめたいけど「どうすればいいの?」

誰でも私を助けてもらえますか?

4

3 に答える 3

1

うん。おそらく最善の方法は、文字列全体を取得して、自分で数値を解析することです。line inputただし、これには、代わりにを使用する必要があります。これは、最初のコンマの前の文字列のみを返すためです。 whereinputは文字列全体を返します。inputline 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、実行時に配列のサイズを変更できるようにしてください。

于 2014-12-11T18:33:10.823 に答える
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

これは文字列に埋め込まれた引用符を処理しないことに注意してください。次の引用符で囲まれていないコンマではなく、2 番目の二重引用符で文字列が切り捨てられます。

つまり、次の場合:input #1, string1,x

とファイルが含まれています

"hello"world", 2

hello と 2 だけが返されます。(FB v 1.01 の時点で) 他の場所に引用符が埋め込まれた文字列を持つことができるので、これはバグだと思います。

ところで、CSV ファイルの作成は、次を使用して簡単に行うことができます。

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

これが役立つことを願っています。他のいくつかの場所で同じ質問を見ました。

于 2015-01-23T07:39:29.657 に答える
1

「文字列」を入力してから、文字列を指定された値の数に分割する必要があります。

于 2012-02-15T13:55:43.227 に答える