はじめに
そもそも Nim とは何ぞや。って人も多いと思いますので、かなり大雑把に (語弊を招くかもしれない) 説明をすると Python ライクな構文に魔改造した C 言語です。
Qiita にも僕より詳しい方が何人もいらっしゃるので、「Nim」と検索窓に入力してその方達の記事も同時に参考にしていただけるとありがたいです。
概要
ご存知の方もたくさんいらっしゃると思いますが、理系のレポートや論文を書く際は、タイトルにもあるような「、」や「。」といった句読点は好まれず、", " や ". " のような半角のカンマもしくはピリオドに半角のスペースを入力する形式が良しとされています。
しかし、日本語入力をしているとどうしても誤字として、先に挙げたようなものを入力してしまうんですよね。(人間だもの。)
そこで、自動で検知して置き換えてくれれば便利だよね。Nim のプログラムも書いてみたいよね。って事で今回のプログラムに至ります。
実行環境
macOS (ver 10.14)
Nim (ver 0.19.0)
実際に使ってみる
こんな感でぃで、半角・全角の句読点が入り乱れてても,自動的に変換してくれるんよ。
実行ファイルを動かしてあげるとこのように綺麗に直してくれます。
こんな感でぃで, 半角・全角の句読点が入り乱れてても, 自動的に変換してくれるんよ.
コード
コードはこのようになっています。
実際に見てみると、割と Python に似た構文ではないですか?
import strutils, pegs, unicode, os
if os.paramCount() == 2 :
var clp = os.commandLineParams()
var f : File = open($clp[0] , FileMode.fmRead)
defer :
close(f)
var rf : string = f.readAll()
rf = rf.replace(",",", ")
.replace("、",", ")
.replace("。",". ")
.replace(".",". ")
.replace(". \n", ".\n")
var wf : File = open($clp[1], FileMode.fmWrite)
defer :
close(wf)
echo "Successful"
wf.writeLine $rf
else :
echo "You should type \"./shaping (Read)FILENAME (Write)FILENAME\" "
プログラムを見ればなんとなく動きはわかると思いますが、やっている事といえば
- コマンドライン引数に変換元のファイル名と変換後のファイル名があるか判断
- (欠けている場合は else 文を実行)
- 変換元のファイルを読み込み
- 文字の置き換え
- 変換後に "Successful" と表示する
くらいのものなので、そんなに複雑ではないかと思います。
コンパイル & ラン
Nim はコンパイルが必要な言語なので、このようにコンパイルをしてあげてから、生成された実行ファイルを使ってランします。
> nim c shaping.nim
> ./shaping.nim (Read)FILENAME (Write)FILENAME
まとめ
Nim を使ってファイル中の文字の置き換えを行ってみました。今回は使用していませんが、正規表現を使ってあげる事でより豊かな変換ができそうですね。
Nim はまだバージョンが 1 に到達していない未熟な言語であり、実際の業務で使用するにはまだ安定性が足りないかもしれません。
しかし、様々なライブラリの開発も進んでいるためこれからの未来に可能性がないわけではないと僕は考えています。
今回の記事で Nim に興味を持って、使ってみたいという方がいれば嬉しいです。
アドバイスやコメントがあれば気軽によろしくお願いします。
おまけ
GitHub の方にも挙げておきましたので、見てみてください。