Юлия - Прочитайте каждые 358 строк файла - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над некоторыми расчетами для моих кристаллов. Мой файл имеет около 15 750 750 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 Ответ

2 голосов
/ 29 мая 2019

Полагаю, у вас есть в файле 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 = Array{Array{SubString{String}, 1}, 1}(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 = Array{Array{Int, 1}, 1}(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")
...