「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Juliaを使うときのTipsをまとめる(その05/X)

 \mathrm{Julia}を使うのに、今一度

で使い方を整理する。

前回

power-of-awareness.com

注意

 参照文献はかなり古い(2019年)ため、現在のバージョンでは動作しない関数などが多いとの評判がある。そこでそういった齟齬があった場合は随時コメントする。なお筆者の環境は、

アプリケーション バージョン
\mathrm{Julia} 1.8.0
\mathrm{Jupyter} \mathrm{Notebook} 6.5.2

である。

1. データ構造とアルゴリズム

 \mathrm{Julia}に組み込まれた機能を利用しつつ実用的なカスタムアルゴリズムを実装する方法を紹介する。

1.5 UTF-8を扱ってみる

Hello.txtの内容
Bulgarian здравейте
Chinese 你好
English Hello
Greek Χαίρετε
Hindi नमस्ते
Japanese こんにちは
Khmer សួស្តី
Korean 안녕하세요
Polish cześć
Russian Здравствуйте

#########################
### UTF-8を使ってみる ###
#########################

hello = readlines(".../Hello.txt")

hello_dict = Dict(map(x -> Pair(x...), split.(hello, ' '))) # 辞書型に変換

chinese = hello_dict["Chinese"]

println(codeunits(chinese))                          # 文字列の符号単位のベクトル様オブジェクト
println(ncodeunits(chinese))                         # 文字列に含まれる符号単位の個数
println(collect(chinese))                            # 文字に分解
println(length(chinese))                             # 文字数
println(isvalid.(chinese,1:ncodeunits(chinese)))     # インデックスとして有効な文字の文字数目
println(thisind.(chinese,0:ncodeunits(chinese)+1))   # インデックスiが指す文字の最初のインデックス
println(nextind.(chinese,0:ncodeunits(chinese)))     # インデックスiより後ろにある文字の最初のインデックス
println(prevind.(chinese,1:ncodeunits(chinese)+1))   # インデックスiより前にある文字の最初のインデックス

2. Juliaによるデータエンジニアリング

2.1 ストリームを管理する

 デバイス上にあるデータを読み書きすべく、ファイルストリームを\mathrm{Julia}で扱う方法を紹介する。
 ストリームを扱う場合、\mathrm{close}()することを忘れないようにする。\mathrm{do}ブロック構文を用いれば自動的にクローズしてくれるため、こちらの方が望ましい。

###########
### I/O ###
###########


## ファイルの読み書き
# ここではJuliaのREPL
f = open(".../julia_test.txt", "w")

write(f, "first line\nsecond line\n")

println(f, "last line")
close(f)

# ファイルの読み込み
f = open(".../julia_test.txt", "r")

println(readline(f)) # 1行ずつ読み込む
println(readline(f))
println(readline(f))
println(eof(f))
close(f)

# 一度に読み込む
lines = open(".../julia_test.txt", "r") do f
    readlines(f)
end

println(lines)

# 一度に読込、バイナリデータとして保持
data = open(".../julia_test.txt", "r") do f
    read(f)
end

println(data)

# バイナリデータを保持するdataを文字列に変換
text = String(data)
println(text)
println(data)      # 変換すると元の変数は空になる
プライバシーポリシー お問い合わせ