Elm:
Lese en tekstfil

Hvordan:

Elm har ikke innebygd støtte for å lese filer direkte fra filsystemet, da det primært kjøres i nettlesere og fokuserer på sikkerhet. Men, du kan bruke en filopplastningsinput for å be brukere velge en tekstfil, og så lese innholdet med fil-API-et i JavaScript. Her er en enkel måte å gjøre det på:

module Main exposing (main)

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

-- SUBSCRIPTIONS --

subscriptions : Model -> Sub Msg
subscriptions model =
    Select.files (List.head model.files)

-- MODEL --

type alias Model =
    { files : List File
    , content : Maybe String
    }

initialModel : Model
initialModel =
    { files = []
    , content = Nothing
    }

-- UPDATE --

type Msg
    = FilesSelected (List File)
    | FileContentRead String

update : Msg -> Model -> Model
update msg model =
    case msg of
        FilesSelected files ->
            { model | files = files }

        FileContentRead content ->
            { model | content = Just content }

-- VIEW --

view : Model -> Html Msg
view model =
    div []
        [ button [ onClick (Select.filesSelect "text/*") ] [ text "Velg en fil" ]
        , div [] (maybeToList (text << Maybe.withDefault "Ingen fil valgt" model.content))
        ]
        
-- PORTS --

port module Ports exposing (..)

port readFile : File -> Cmd msg

-- INTEROP --

fileReader : Sub Msg
fileReader =
    Ports.readFile <|
        Select.single <| \file ->
            FilesSelected [file]
            
-- MAIN --

main : Program () Model Msg
main =
    Browser.element
        { init = \_ -> (initialModel, Cmd.none)
        , view = view
        , update = update
        , subscriptions = \_ -> fileReader
        }

Dykke dypere:

Historisk sett har nettleser-baserte språk som Elm unngått direkte filsystem-tilgang for sikkerhet. Elm henter filer gjennom interaksjoner som fildialoger eller dra-og-slipp. I mer server-orienterte omgivelser brukes programmeringsspråk med direkte filsystemtilgang, som Node.js eller Python. Elm bruker JavaScript-interoperabilitet (Ports) for å håndtere fillesing.

Se også: