Прочитать строку из файла и преобразовать в массив Julia - PullRequest
3 голосов
/ 06 января 2020

У меня есть такой текстовый файл:

  5
  10
  5 3 2 7 4
  2 8 4 2 5

Мне нужно поместить первые два числа в различные переменные в виде целых чисел, я УСПЕШНО сделал это с:

arq = open("C:\\Users\\Breno Maia\\Desktop\\test.txt", "r")
n = readline(arq)
c = readline(arq)
n=parse(Int64, n)
c=parse(Int64, c)

Теперь мне нужно поместить третью и четвертую строки в два разных массива целых чисел. Мое решение, которое НЕ РАБОТАЕТ:

line3=readline(arq)
line4 = readline(arq)

p= split(line3, "") //convert string into array
deleteat!(p, findall(x->x==" ", p)) //remove spaces

for i in p
   i=parse(Int64, i)
end

Когда я печатаю строку 3, она показывает: "SubString {String} [" 5 "," 3 "," 2 "," 7 "," 4 "]" помогите плз. Спасибо

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Вы привязываете i к правильному значению, но фактически не обновляете никаких ссылок в пределах p.

Вы можете сделать что-то вроде этого: p = map(i -> parse(Int, i), p)

0 голосов
/ 07 января 2020

Я рекомендую использовать readdlm для упрощения таких задач, как эта. Первые два значения могут быть получены в одной строке, например:

v1,v2=filter(x->typeof(x)<:Int, permutedims(readdlm("test.txt"))[:])

Вот полный код, который получает первое значение, второе значение, третью и четвертую строку:

shell> more test.txt
5
10
5 3 2 7 4
2 8 4 2 5

julia> using DelimitedFiles

julia> dat = readdlm("file.txt")
4×5 Array{Any,2}:
  5   ""   ""   ""   ""
 10   ""   ""   ""   ""
  5  3    2    7    4
  2  8    4    2    5

julia> dat[1,1], dat[2,1], Int.(dat[3,:]), Int.(dat[4,:])
(5, 10, [5, 3, 2, 7, 4], [2, 8, 4, 2, 5])
...