Чтение текстового файла

Elm:
Чтение текстового файла

Как:

Elm в основном сосредоточен на разработке для фронтенда, где прямой доступ к файловой системе невозможен по соображениям безопасности. Вместо этого вы обрабатываете загрузки файлов пользователями. Вот как вы можете прочитать текстовый файл, выбранный пользователем:

module Main exposing (..)

import Browser
import File exposing (File)
import File.Selector as Selector
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)

type alias Model =
    { fileContent : String }

type Msg
    = SelectFile
    | ReceiveFileContent (Result () String)

init : Model
init =
    { fileContent = "" }

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        SelectFile ->
            (model, fileSelectCmd)

        ReceiveFileContent (Ok content) ->
            ({ model | fileContent = content }, Cmd.none)

        ReceiveFileContent (Err _) ->
            (model, Cmd.none)

fileSelectCmd : Cmd Msg
fileSelectCmd =
    File.select [ Selector.accept "text/*" ] { onDone = ReceiveFileContent }

view : Model -> Html Msg
view model =
    div []
        [ button [ onClick SelectFile ] [ text "Выбрать текстовый файл" ]
        , div [] [ text model.fileContent ]
        ]

main : Program () Model Msg
main =
    Browser.sandbox { init = init, update = update, view = view }

Запустите код в браузере, нажмите кнопку и выберите текстовый файл. Он отобразит содержимое в вашем приложении Elm.

Глубокое погружение

Elm не читает файлы напрямую с файловой системы сервера - он не был разработан для серверных операций. Вместо этого Elm управляет вводом файлов через File API в браузере, обычно инициируемый действием пользователя, таким как выбор файла или действие перетаскивания. Это мера безопасности.

В прошлом вы могли использовать JavaScript и Node.js для чтения файлов на стороне сервера или XMLHttpRequest (XHR) для чтения на стороне клиента без взаимодействия пользователя. У них разные модели безопасности и возможности.

Модули File и File.Selector в Elm делают работу с чтением файлов в браузере довольно гладкой, но помните о философии Elm “нет побочных эффектов”. Это означает, что чтение файлов строго контролируется, требуется явное действие пользователя. Также разбор и декодирование содержимого файла требует внимания, чтобы соответствовать строгой типизации Elm.

Смотрите также