Я работаю над некоторыми расчетами для моих кристаллов. В моем файле около 15 750 756 координат x-y-z в строковом формате. Я хочу прочитать информацию в каждой 358 строке, но я не знаю, как это сделать.
Я знаю только этот код. Но он будет читать каждую строку вместо каждой 358 строки.
file = open(trajectory_file_path)
for i in eachline(file)
#What to do here?
append!(defect_positions,[split(i[4:end])] )
end
end
close(file)
Итак, чтобы было ясно, вы хотите прочитать 1 строку из файла, обновить defect_positions
, затем пропустить 357 строк в файле, ..., повторить до конца файла?
Я полагаю, у вас есть в файле test.csv
следующие строки:
1 2 3
4 5 6
...
100 101 102
...
например, более 358 строк и три значения, представляющие ваши координаты x-y-z.
Для чтения каждых 358 строк и сохранения в массиве defect_positions
вы можете сделать следующее:
function read_some_lines(filepath::String)
defect_positions = Vector{Vector{SubString{String}}}(undef, 0)
file = open(filepath)
counter = 0
for i in eachline(file)
if (counter%358 == 0)
push!(defect_positions,split(i))
end
counter += 1
end
close(file)
defect_positions
end
read_some_lines("./test.csv")
Например, вы можете преобразовать строки, представляющие ваши координаты, в Integers
или Float64
.
function read_some_lines(filepath::String)
defect_positions = Vector{Vector{Int}}(undef, 0)
file = open(filepath)
counter = 0
for i in eachline(file)
if (counter%358 == 0)
push!(defect_positions,parse.(Int,split(i)))
end
counter += 1
end
close(file)
defect_positions
end
read_some_lines("./test.csv")
Вопрос немного не ясен для меня. Что вы хотите сделать, чего код еще не делает?