Julia Language
Invoer
Zoeken…
Syntaxis
- Lees regel()
- readlines ()
- readstring (STDIN)
- chomp (str)
- open (f, bestand)
- eachline (io)
- readstring (file)
- read (file)
- readcsv (file)
- readdlm (file)
parameters
Parameter | Details |
---|---|
chomp(str) | Verwijder tot een laatste nieuwe regel uit een string. |
str | De tekenreeks om een nieuwe regel van te verwijderen. Merk op dat strings onveranderlijk zijn door conventie. Deze functie retourneert een nieuwe tekenreeks. |
open(f, file) | Open een bestand, roep de functie op en sluit het bestand daarna. |
f | De functie om de IO-stream op te roepen die het bestand opent, wordt gegenereerd. |
file | Het pad van het te openen bestand. |
Een string uit standaardinvoer lezen
De STDIN
stream in Julia verwijst naar standaardinvoer . Dit kan gebruikersinvoer zijn, voor interactieve opdrachtregelprogramma's, of invoer uit een bestand of pijplijn die is doorgestuurd naar het programma.
De readline
functie readline
, als er geen argumenten worden gegeven, gegevens van STDIN
tot een nieuwe regel wordt gevonden of de STDIN
stream de status van het einde van het bestand ingaat. Deze twee gevallen kunnen worden onderscheiden door of het \n
teken als het laatste teken is gelezen:
julia> readline()
some stuff
"some stuff\n"
julia> readline() # Ctrl-D pressed to send EOF signal here
""
Vaak geven we voor interactieve programma's niet om de EOF-status en willen we gewoon een string. We kunnen de gebruiker bijvoorbeeld om invoer vragen:
function askname()
print("Enter your name: ")
readline()
end
Dit is echter niet helemaal bevredigend vanwege de extra nieuwe regel:
julia> askname()
Enter your name: Julia
"Julia\n"
De chomp
functie is beschikbaar om maximaal één volglijn van een string te verwijderen. Bijvoorbeeld:
julia> chomp("Hello, World!")
"Hello, World!"
julia> chomp("Hello, World!\n")
"Hello, World!"
We kunnen onze functie daarom uitbreiden met chomp
zodat het resultaat is zoals verwacht:
function askname()
print("Enter your name: ")
chomp(readline())
end
wat een meer wenselijk resultaat heeft:
julia> askname()
Enter your name: Julia
"Julia"
Soms willen we zoveel mogelijk regels lezen (totdat de invoerstroom de status van het einde van het bestand bereikt). De functie readlines
biedt die mogelijkheid.
julia> readlines() # note Ctrl-D is pressed after the last line
A, B, C, D, E, F, G
H, I, J, K, LMNO, P
Q, R, S
T, U, V
W, X
Y, Z
6-element Array{String,1}:
"A, B, C, D, E, F, G\n"
"H, I, J, K, LMNO, P\n"
"Q, R, S\n"
"T, U, V\n"
"W, X\n"
"Y, Z\n"
Nogmaals, als we een hekel hebben aan de nieuwe regels aan het einde van regels gelezen door readlines
, kunnen we de chomp
functie gebruiken om ze te verwijderen. Deze keer zenden we de chomp
functie uit over de hele array:
julia> chomp.(readlines())
A, B, C, D, E, F, G
H, I, J, K, LMNO, P
Q, R, S
T, U, V
W, X
Y, Z
6-element Array{String,1}:
"A, B, C, D, E, F, G"
"H, I, J, K, LMNO, P"
"Q, R, S"
"T, U, V"
"W, X "
"Y, Z"
Op andere momenten geven we misschien helemaal niets om lijnen en willen we gewoon zoveel mogelijk lezen als een enkele string. De readstring
functie bereikt dit:
julia> readstring(STDIN)
If music be the food of love, play on,
Give me excess of it; that surfeiting,
The appetite may sicken, and so die. # [END OF INPUT]
"If music be the food of love, play on,\nGive me excess of it; that surfeiting,\nThe appetite may sicken, and so die.\n"
(het # [END OF INPUT]
maakt geen deel uit van de oorspronkelijke invoer; het is toegevoegd voor de duidelijkheid.)
Merk op dat readstring
moet worden doorgegeven aan het STDIN
argument.
Getallen lezen van standaardinvoer
Getallen lezen van standaardinvoer is een combinatie van tekenreeksen lezen en tekenreeksen ontleden als getallen.
De parse
wordt gebruikt om een string in het gewenste nummertype te ontleden:
julia> parse(Int, "17")
17
julia> parse(Float32, "-3e6")
-3.0f6
Het door parse(T, x)
verwachte formaat parse(T, x)
is vergelijkbaar met, maar niet exact hetzelfde, als het formaat dat Julia verwacht van letterlijke getallen :
julia> -00000023
-23
julia> parse(Int, "-00000023")
-23
julia> 0x23 |> Int
35
julia> parse(Int, "0x23")
35
julia> 1_000_000
1000000
julia> parse(Int, "1_000_000")
ERROR: ArgumentError: invalid base 10 digit '_' in "1_000_000"
in tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at ./parse.jl:88
in parse(::Type{Int64}, ::String) at ./parse.jl:152
Door de functies parse
en lezen te readline
, kunnen we een enkel nummer van een regel lezen:
function asknumber()
print("Enter a number: ")
parse(Float64, readline())
end
die werkt zoals verwacht:
julia> asknumber()
Enter a number: 78.3
78.3
De gebruikelijke kanttekeningen bij drijvende-komma-precisie zijn van toepassing. Merk op dat parse
kan worden gebruikt met BigInt
en BigFloat
om verlies van precisie te verwijderen of te minimaliseren.
Soms is het handig om meer dan één nummer van dezelfde regel te lezen. Doorgaans kan de regel met witruimte worden gesplitst:
function askints()
print("Enter some integers, separated by spaces: ")
[parse(Int, x) for x in split(readline())]
end
die als volgt kan worden gebruikt:
julia> askints()
Enter some integers, separated by spaces: 1 2 3 4
4-element Array{Int64,1}:
1
2
3
4
Gegevens uit een bestand lezen
Tekenreeksen of bytes lezen
Bestanden kunnen worden geopend voor lezen met behulp van de open
functie, die vaak wordt gebruikt in combinatie met do block-syntaxis :
open("myfile") do f
for (i, line) in enumerate(eachline(f))
print("Line $i: $line")
end
end
Stel dat myfile
bestaat en de inhoud ervan is
What's in a name? That which we call a rose
By any other name would smell as sweet.
Deze code zou dan het volgende resultaat opleveren:
Line 1: What's in a name? That which we call a rose
Line 2: By any other name would smell as sweet.
Merk op dat elke eachline
een luie iterabele is over de regels van het bestand. Het verdient de voorkeur om readlines
te readlines
om prestatieredenen.
Omdat do
bloksyntax is gewoon syntactische suiker voor anonieme functie, kunnen we passeren vernoemd functies te open
ook:
julia> open(readstring, "myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"
julia> open(read, "myfile")
84-element Array{UInt8,1}:
0x57
0x68
0x61
0x74
0x27
0x73
0x20
0x69
0x6e
0x20
⋮
0x73
0x20
0x73
0x77
0x65
0x65
0x74
0x2e
0x0a
De functies read
en readstring
bieden handige methoden die een bestand automatisch openen:
julia> readstring("myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"
Gestructureerde gegevens lezen
Stel dat we een CSV-bestand met de volgende inhoud hadden in een bestand met de naam file.csv
:
Make,Model,Price
Foo,2015A,8000
Foo,2015B,14000
Foo,2016A,10000
Foo,2016B,16000
Bar,2016Q,20000
Dan kunnen we de readcsv
functie gebruiken om deze gegevens in een Matrix
te lezen:
julia> readcsv("file.csv")
6×3 Array{Any,2}:
"Make" "Model" "Price"
"Foo" "2015A" 8000
"Foo" "2015B" 14000
"Foo" "2016A" 10000
"Foo" "2016B" 16000
"Bar" "2016Q" 20000
Als het bestand in plaats daarvan met tabs is gescheiden, in een bestand met de naam file.tsv
, kan in plaats daarvan de functie readdlm
worden gebruikt, met het argument delim
ingesteld op '\t'
. Meer geavanceerde workloads moeten het CSV.jl- pakket gebruiken .