Входной массив в Free Basic - PullRequest
0 голосов
/ 15 февраля 2012

Теперь я программирую на 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 ]

1 голос
/ 11 декабря 2014

Да. Лучше всего, вероятно, взять всю строку и разобрать числа самостоятельно. Но для этого вам нужно использовать 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, чтобы размер массива можно было изменять во время выполнения.

1 голос
/ 23 января 2015

Если вы вводите все цифры (без запятых) и / или текст БЕЗ кавычек, то это довольно просто:

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

Надеждаэто помогает, я видел тот же вопрос в нескольких других местах.

1 голос
/ 15 февраля 2012

Вы должны ввести «строку», а затем разбить строку на количество заданных значений.

...