{status, body} = File.read("/etc/hosts")
if status == :ok do
hosts = String.split body, "\n"
hosts = Enum.map(hosts, fn(host) -> line_to_host(host) end)
else
IO.puts "error reading: /etc/hosts"
end
Ho la seguente funzione di elisir dove ho letto il file/etc/hosts e cercare di dividerlo riga per riga usando String.split
.Come ottenere gli elementi della lista in base all'indice in elisir
Quindi eseguo la mappatura dell'elenco di linee degli host e di chiamare line_to_host (host) per ciascuno. Il metodo line_to_host divide la linea da " "
e poi voglio impostare il from
e to
variabile:
def line_to_host(line) do
data = String.split line, " "
from = elem(data, 0) // doesn't work
to = elem(data, 1) // doesn't work either
%Host{from: from, to: to}
end
ho guardato attraverso StackOverflow, la documentazione elisir e Googled su come ottenere un elemento di lista in un indice specifico. So che c'è head/tail
ma ci deve essere un modo migliore per ottenere gli elementi della lista.
elem(list, index)
fa esattamente ciò di cui ho bisogno ma sfortunatamente non funziona con String.split
.
Come ottenere elementi di lista/tuple per ID in elisir
don t vuole fare '{status, corpo} = File.read ("/ etc/hosts") 'seguito da' if'. Preferisci il pattern matching: 'case File.read ("/etc/hosts ") do {: ok, body} -> ...' –
ok, bello saperlo. grazie compagno. –