Elm:
Läsa en textfil

Hur gör man:

Elm har ingen inbyggd filsystemsfunktionalitet på klient-sidan av en webbapplikation p.g.a. webbsäkerhetsrestriktioner. Istället, använder du en File-modul som möjliggör att användaren kan välja filer som sedan kan läsas. Här är ett grundläggande exempel:

module Main exposing (main)
import Browser
import File exposing (File)
import Html exposing (Html, button, div, input)
import Html.Events exposing (onClick)
import Task

type Msg
    = SelectFile (List File)
    | ReadFile (Result String String)

type alias Model =
    { fileContent : Maybe String }

main =
    Browser.element
        { init = init
        , update = update
        , view = view
        , subscriptions = \_ -> Sub.none
        }

init : () -> (Model, Cmd Msg)
init _ =
    ( { fileContent = Nothing }
    , Cmd.none
    )

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        SelectFile files ->
            let
                file = List.head files
            in
            case file of
                Just selectedFile ->
                    ( model
                    , selectedFile
                        |> File.stringReader
                        |> Task.perform ReadFile
                    )

                Nothing ->
                    (model, Cmd.none)

        ReadFile result ->
            case result of
                Ok content ->
                    ( { model | fileContent = Just content }, Cmd.none )

                Err _ ->
                    ( { model | fileContent = Nothing }, Cmd.none )

view : Model -> Html Msg
view model =
    div []
        [ input [ Html.Attributes.type_ "file", Html.Events.onInput (SelectFile << File.selectMultiple) ] []
        , div []
            (case model.fileContent of
                Just content ->
                    [ div [] [ Html.text content ] ]

                Nothing ->
                    []
            )
        ]

Här använder vi File-modulen för att läsa innehållet av en användarvald textfil och sedan visa innehållet på skärmen.

Djupdykning:

I Elm, som i många funktionella språk, hanterar vi inte filsystemet direkt som i andra språk som Python eller JavaScript på serversidan. Historiskt sett är Elm skapat för att köras i webbläsaren där filsystemet är otillgängligt av säkerhetsskäl.

Elm’s filhantering på webben är begränsad till att användarna själva väljer vilken fil de vill att applikationen ska bearbeta. Detta sker genom en input av typen “file”, som sedan kan läsas som en sträng eller omvandlas till andra format via filmodulen.

Som alternativ när det behövs server-side filhantering, kan man använda server-side Elm, vilket är mindre vanligt, eller integrera Elm-framsidan med ett backend i ett annat språk (t.ex. Node.js, Go, Ruby) som sköter filsystem-relaterade uppgifter.

Se även: