Я преподаю себе Elixir для своих исследований, и часто мое исследование требует открытия нескольких десятков или сотен текстовых файлов, объединяя данные в эти файлы и манипулируя данными. Я пытаюсь выяснить, как я могу открыть все файлы, которые у меня есть в каталоге, и получить доступ к данным во всех этих файлах. Я хотел бы избежать использования цикла for, потому что итерация через 100 файлов в цикле будет очень медленной. Я думаю, что модуль Stream идеален для моих целей, но я не знаю, как его использовать.Открывать и собирать данные из нескольких файлов в Elixir
Ниже приведено несколько тестовых кодов. Все, что предполагается сделать, это открыть кучу файлов, содержащих случайные числа, преобразовать строки чисел в файлы в целые числа и отсортировать их. Все работает, кроме части открытых файлов. Вы можете видеть, что я пытался использовать модуль Path, и это действительно удается найти все файлы, но я не знаю, как передать это функции sort_num удобным образом. Спасибо за вашу помощь всем!
defmodule OpenFiles do
def file_open do
Path.wildcard("numfiles/*.txt")
end
def sort_num do
file_open
|> File.stream!
|> Stream.map(&String.strip/1)
|> Stream.map(&String.to_integer/1)
|> Enum.sort
end
end
IO.inspect OpenFiles.sort_num
Действительно большой и подробный ответ! Спасибо. Да, я думаю, что реализация параллельной карты будет моим лучшим выбором. –