수색…


통사론

  • readline ()
  • readlines ()
  • readstring (STDIN)
  • chomp (str)
  • open (f, file)
  • 각 행 (io)
  • readstring (파일)
  • 읽기 (파일)
  • readcsv (파일)
  • readdlm (파일)

매개 변수

매개 변수 세부
chomp(str) 문자열에서 마지막 줄 바꿈 문자 하나를 제거하십시오.
str 후행 줄 바꿈을 제거 할 문자열입니다. 문자열 은 규칙에 따라 변경되지 않습니다. 이 함수는 새로운 문자열을 반환합니다.
open(f, file) 파일을 열고 함수를 호출 한 다음 나중에 파일을 닫습니다.
f 파일을 여는 IO 스트림에서 호출하는 함수가 생성됩니다.
file 열 파일의 경로입니다.

표준 입력에서 문자열 읽기

Julia의 STDIN 스트림은 표준 입력을 나타냅니다. 대화식 명령 줄 프로그램의 사용자 입력이나 프로그램으로 리디렉션 된 파일이나 파이프 라인의 입력을 나타낼 수 있습니다.

인수를 제공하지 않으면 readline 함수는 개행 문자가 STDIN 거나 STDIN 스트림이 파일 끝 상태가 될 때까지 STDIN 에서 데이터를 읽습니다. 이 두 경우는 \n 문자가 마지막 문자로 읽혔는지 여부에 따라 구분됩니다.

julia> readline()
some stuff
"some stuff\n"

julia> readline()  # Ctrl-D pressed to send EOF signal here
""

대개 대화식 프로그램의 경우 EOF 상태에 신경 쓰지 않고 문자열 만 원합니다. 예를 들어 사용자에게 입력을 요구할 수 있습니다.

function askname()
    print("Enter your name: ")
    readline()
end

그러나 이것은 추가 줄 바꿈 때문에 만족스럽지 않습니다 :

julia> askname()
Enter your name: Julia
"Julia\n"

chomp 함수는 문자열에서 하나의 후미 줄 바꿈까지 제거 할 수 있습니다. 예 :

julia> chomp("Hello, World!")
"Hello, World!"

julia> chomp("Hello, World!\n")
"Hello, World!"

따라서 우리는 chomp 함수를 사용하여 결과가 예상대로 증가 할 수 있습니다.

function askname()
    print("Enter your name: ")
    chomp(readline())
end

이는 더 바람직한 결과를 낳습니다.

julia> askname()
Enter your name: Julia
"Julia"

경우에 따라 가능한 한 많은 행을 읽을 수 있습니다 (입력 스트림이 파일 끝 (end-of-file) 상태가 될 때까지). readlines 함수는 그 기능을 제공합니다.

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"
0.5.0

다시 한번, readlines 읽은 행의 마지막에있는 개행을 싫어할 경우, chomp 함수를 사용하여 그 행을 제거 할 수 있습니다. 이번에는 전체 배열에 chomp 함수를 브로드 캐스트 합니다.

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"               

다른 때에는 우리는 줄을 전혀 신경 쓰지 않고 가능한 한 한 줄로 읽고 싶을뿐입니다. readstring 함수는 다음을 수행합니다.

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"

( # [END OF INPUT] 은 원래 입력의 일부가 아니며 명확성을 위해 추가되었습니다.)

readstring 에는 STDIN 인수가 전달되어야합니다.

표준 입력에서 숫자 읽기

표준 입력에서 숫자를 읽는 것은 문자열 읽기와 숫자와 같은 문자열의 구문 분석의 조합입니다.

parse 함수는 문자열을 원하는 숫자 형식으로 구문 분석하는 데 사용됩니다.

julia> parse(Int, "17")
17

julia> parse(Float32, "-3e6")
-3.0f6

parse(T, x) 의해 예상되는 형식은 Julia가 숫자 리터럴 에서 기대하는 형식과 유사하지만 완전히 동일하지는 않습니다.

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

parsereadline 함수를 결합하면 한 줄에서 하나의 숫자를 읽을 수 있습니다 :

function asknumber()
    print("Enter a number: ")
    parse(Float64, readline())
end

예상대로 작동합니다.

julia> asknumber()
Enter a number: 78.3
78.3

부동 소수점 정밀도 에 대한 일반적인주의 사항이 적용됩니다. parseBigIntBigFloat 와 함께 사용되어 정밀도의 손실을 제거하거나 최소화 할 수 있습니다.

때로는 동일한 행에서 둘 이상의 숫자를 읽는 것이 유용합니다. 일반적으로 공백으로 줄을 나눌 수 있습니다.

function askints()
    print("Enter some integers, separated by spaces: ")
    [parse(Int, x) for x in split(readline())]
end

다음과 같이 사용할 수 있습니다.

julia> askints()
Enter some integers, separated by spaces: 1 2 3 4
4-element Array{Int64,1}:
 1
 2
 3
 4

파일에서 데이터 읽기

문자열 또는 바이트 읽기

open 함수를 사용하여 파일을 열 수 있습니다.이 함수는 종종 do 블록 구문 과 함께 사용됩니다.

open("myfile") do f
    for (i, line) in enumerate(eachline(f))
        print("Line $i: $line")
    end
end

myfile 이 있고 그 내용이

What's in a name? That which we call a rose
By any other name would smell as sweet.

그런 다음이 코드는 다음 결과를 생성합니다.

Line 1: What's in a name? That which we call a rose
Line 2: By any other name would smell as sweet.

각 행은 파일의 행에 대해 지연 가능한 eachline 유의하십시오. 성능상의 이유로 readlines 을 사용하는 것이 좋습니다.

때문에 do 구문은 익명 함수 단지 문법 설탕입니다 차단, 우리가하는 기능 이름을 전달할 수 있습니다 open 도를 :

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

readreadstring 함수는 자동으로 파일을 열 수있는 편리한 메소드를 제공합니다.

julia> readstring("myfile")
"What's in a name? That which we call a rose\nBy any other name would smell as sweet.\n"

구조화 된 데이터 읽기

file.csv 라는 파일에 다음 내용이 포함 된 CSV 파일 이 있다고 가정합니다.

Make,Model,Price
Foo,2015A,8000
Foo,2015B,14000
Foo,2016A,10000
Foo,2016B,16000
Bar,2016Q,20000

그런 다음 readcsv 함수를 사용하여이 데이터를 Matrix 로 읽을 수 있습니다.

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      

파일이 탭으로 구분 된 경우 file.tsv 라는 파일에서 대신 '\t' 설정된 delim 인수를 사용하여 readdlm 함수를 사용할 수 있습니다. 고급 작업은 CSV.jl 패키지를 사용해야 합니다 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow