Rustの業務アプリ活用を検討する投稿の第3回目です。
今回はCSVファイルの入出力について調べた話です。
調査のきっかけは、妻の職場で、社内システムからダウンロードした定型の30MBくらいのCSVを、部門別に売上が集計されたExcel形式で見れるようにしたいのだとか。
まァぱっと思い浮かぶ手法はVBAですね。
ただ、Excelが入っていないパソコンでも実行できたり、少し勉強してでも息の長い言語で作りたいとのこと。
また、JavaやPythonなどのように、ランタイムは極力インストールしないようにしたいとのこと。
そこで、もしRustで作ろうとしたらどれくらい手間がかかるのか、どのようなライブラリ(クレート)があるのかを調べてみました。
RustはAmazonのAWSで開発環境を整えられたり、Microsoftが利用を促すなど、いよいよ超大手からも脚光を浴びるようになってきました。
また、WindowsやLinuxのネイティブ環境用に実行ファイルを生成できるため、ランタイムも必要ありません。
さらにはC言語級に高速です。
VBAで作るくらい楽だったらこの上ない選択肢!と思い、調べてみました。
調査結果の概要は....
「Rust」「CSV」でググるとすぐ出てくる以下のサイトは参考になりました。
【翻訳】RustとCSV解析
https://qiita.com/algebroid/items/c456d4ec555ae04c7f92
CSVの解析は少し楽かなーと。
読み込んだ1行が瞬時に構造体になるのはいいですね。
しかし、最も面倒なのが文字コードの変換です。
Rustの内部はテキストはUTF8しか扱えませんし、Linuxの開発環境はUTF8がベース。
Windowsで使うにはMS932(Windows-31J)でないとダメなので、読み込み時はMS932からUTF8へ、書き込み時はUTF8からMS932へ変換する必要があります。
「CSV」クレートの機能にあればいいのですが、別のクレート「encoding_rs」「encoding_rs_io」を利用する必要がありました。
CSVファイルの読み込み時は一度に変換できますが、書き込み時はCSVの1項目ごとにUTF8に変換しないといけないのがまた面倒でした。
文字コード変換機能は、是非「CSV」クレートで対応してほしいですね。
ちなみに、上記の<【翻訳】RustとCSV解析>のサイトでは、バイト配列でCSVを読み込むことで高速化できるという記事があり、実際に試してみたところ、バイト型から文字型・バイト型から数値型、またその逆といった変換が必要となり、さらに文字コードの変換と相まって、相当に面倒でした。
で、結局冒頭の妻の職場で必要な売り上げ集計プログラムは、Rustではタイヘン過ぎる...という結論に。
色々調べたり、借用・ライフタイム・型変換に悩まされた結果、CSVの読み書きと列同士の簡単な計算をするだけなのに、本当にまる1日かかってしまいました。
VBAだと多分1時間かかるかどうか程度と思いますが....
おとなしくVBAで対処しましょうということになりました。
ですが、業務アプリでCSVの編集はつきもの。いい勉強になりました。
どこかでソースを公開できればと思います。
ちなみに、RustでExcelを扱うライブラリも調べたところ、本格的に使える定番なライブラリは....あまりないように見えました。
読み込みのみ、書き込みのみ行えるライブラリが3・4つ存在する程度。
書き込みも書式設定はできなさそうな雰囲気です。
既存のExcelを開いて編集して保存ができれば色々業務アプリで使えるシーンがありそうですが、どうもやり方が今ひとつわからず....
RustでCSVやExcelをめぐるエコシステムはこれからという感じでした。
(酒)
moniswitch
今お使いの離床センサーがそのまま使える!
離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ
monipet
動物病院の犬猫の見守りをサポート
病院を離れる夜間でも安心
ASSE/CORPA
センサー、IoT、ビッグデータを活用して新たな価値を創造
「できたらいいな」を「できる」に
OSGi対応 ECHONET Lite ミドルウェア
短納期HEMS開発をサポート!
WhitePlug
手のひらサイズのLinuxサーバ
株式会社ジェイエスピー
横浜に拠点を置くソフトウェア開発・システム開発・
製品開発(monipet)、それに農業も手がけるIT企業
今回はCSVファイルの入出力について調べた話です。
調査のきっかけは、妻の職場で、社内システムからダウンロードした定型の30MBくらいのCSVを、部門別に売上が集計されたExcel形式で見れるようにしたいのだとか。
まァぱっと思い浮かぶ手法はVBAですね。
ただ、Excelが入っていないパソコンでも実行できたり、少し勉強してでも息の長い言語で作りたいとのこと。
また、JavaやPythonなどのように、ランタイムは極力インストールしないようにしたいとのこと。
そこで、もしRustで作ろうとしたらどれくらい手間がかかるのか、どのようなライブラリ(クレート)があるのかを調べてみました。
RustはAmazonのAWSで開発環境を整えられたり、Microsoftが利用を促すなど、いよいよ超大手からも脚光を浴びるようになってきました。
また、WindowsやLinuxのネイティブ環境用に実行ファイルを生成できるため、ランタイムも必要ありません。
さらにはC言語級に高速です。
VBAで作るくらい楽だったらこの上ない選択肢!と思い、調べてみました。
調査結果の概要は....
- 普通に「csv」というクレートを使うのが定番の方法の模様
- 項目間区切り文字(デリミタ)・項目囲み文字・エスケープ方法・改行コード・ヘッダー有無などを指定して読み書き可能。
- 書き込み時、ディスクへの反映(フラッシュ)タイミングを指定可能。
- 難儀なのがUTF8からの文字コード変換....(後述)
- Rustの借用やライフタイムの概念が常に付きまとうので、やはりVBAほどすらすらコードは書けない....
「Rust」「CSV」でググるとすぐ出てくる以下のサイトは参考になりました。
【翻訳】RustとCSV解析
https://qiita.com/algebroid/items/c456d4ec555ae04c7f92
CSVの解析は少し楽かなーと。
読み込んだ1行が瞬時に構造体になるのはいいですね。
しかし、最も面倒なのが文字コードの変換です。
Rustの内部はテキストはUTF8しか扱えませんし、Linuxの開発環境はUTF8がベース。
Windowsで使うにはMS932(Windows-31J)でないとダメなので、読み込み時はMS932からUTF8へ、書き込み時はUTF8からMS932へ変換する必要があります。
「CSV」クレートの機能にあればいいのですが、別のクレート「encoding_rs」「encoding_rs_io」を利用する必要がありました。
CSVファイルの読み込み時は一度に変換できますが、書き込み時はCSVの1項目ごとにUTF8に変換しないといけないのがまた面倒でした。
文字コード変換機能は、是非「CSV」クレートで対応してほしいですね。
ちなみに、上記の<【翻訳】RustとCSV解析>のサイトでは、バイト配列でCSVを読み込むことで高速化できるという記事があり、実際に試してみたところ、バイト型から文字型・バイト型から数値型、またその逆といった変換が必要となり、さらに文字コードの変換と相まって、相当に面倒でした。
で、結局冒頭の妻の職場で必要な売り上げ集計プログラムは、Rustではタイヘン過ぎる...という結論に。
色々調べたり、借用・ライフタイム・型変換に悩まされた結果、CSVの読み書きと列同士の簡単な計算をするだけなのに、本当にまる1日かかってしまいました。
VBAだと多分1時間かかるかどうか程度と思いますが....
おとなしくVBAで対処しましょうということになりました。
ですが、業務アプリでCSVの編集はつきもの。いい勉強になりました。
どこかでソースを公開できればと思います。
ちなみに、RustでExcelを扱うライブラリも調べたところ、本格的に使える定番なライブラリは....あまりないように見えました。
読み込みのみ、書き込みのみ行えるライブラリが3・4つ存在する程度。
書き込みも書式設定はできなさそうな雰囲気です。
既存のExcelを開いて編集して保存ができれば色々業務アプリで使えるシーンがありそうですが、どうもやり方が今ひとつわからず....
RustでCSVやExcelをめぐるエコシステムはこれからという感じでした。
(酒)
moniswitch
今お使いの離床センサーがそのまま使える!
離床センサーのスイッチ入れ忘れ事故を防止するスマートスイッチ
monipet
動物病院の犬猫の見守りをサポート
病院を離れる夜間でも安心
ASSE/CORPA
センサー、IoT、ビッグデータを活用して新たな価値を創造
「できたらいいな」を「できる」に
OSGi対応 ECHONET Lite ミドルウェア
短納期HEMS開発をサポート!
WhitePlug
手のひらサイズのLinuxサーバ
株式会社ジェイエスピー
横浜に拠点を置くソフトウェア開発・システム開発・
製品開発(monipet)、それに農業も手がけるIT企業