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.
Смотрите также
- Официальная документация Elm File API: https://package.elm-lang.org/packages/elm/file/latest/
- Руководство по командам и подпискам Elm (для понимания асинхронных операций): https://guide.elm-lang.org/effects/
- Elm Discuss для вопросов и общения с сообществом: https://discourse.elm-lang.org/