Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

:prim_file

livebooks/prim_file_exploration.livemd

:prim_file

read and read_line

file_path = "./data/measurements.10000.txt"

{:ok, file} = :prim_file.open(file_path, [:raw, :read, :binary])
{:ok, data} = :prim_file.read(file, 1024)
{:ok, data} = :prim_file.read(file, 1024)
{:ok, data} = :prim_file.read_line(file)
{:ok, data} = :prim_file.read(file, 1024)
byte_size(data)

reading full file

defmodule FileReader do
  @file_path file_path

  def read() do
    {:ok, file} = :prim_file.open(@file_path, [:raw, :read, :binary])

    do_read(file, 1024 * 1024, [])
  end

  def do_read(file, chunk_size, acc) do
    case :prim_file.read(file, chunk_size) do
      :eof ->
        :prim_file.close(file)
        Enum.reverse(acc)

      {:ok, data} ->
        do_read(file, chunk_size, [data | acc])
    end
  end
end

[data] = FileReader.read()

data |> byte_size()
:binary.split(data, "\n", [:global])
File.read!(file_path) |> byte_size()