滝の音

滝の音

名こそ流れてなお聞こえけれ

VBAで暗号を実装しよう その4 読み書きするファイルを指定しよう

  • はじめに

暗号を実装しようの第4弾。

今回はなんと暗号を実装しません笑

前回の告知のように「形式の修正」

関数の「txt_input」と「txt_output」に

読み込み先、書き込み先のテキストファイルを選択する機能を付け足します。

*

なぜ必要なのか

ファイルのテキストデータを読み込む関数を「txt_input」

ファイルにテキストデータを書き出す関数を「txt_output」

としています。

そうすることでメイン関数をスリムにできたり

あちこちで関数を使いまわすことができます。

ただ。

関数先でファイルのアドレスを固定してしまうとうまくいかないことが多いんですよね。

例えば。

あくまで自分はですが。

暗号の原文はinput.txtに

暗号化された文はcoding.txtに

復元された文はrestoration.txtに

という風に場合のよって読み込むファイルや書き出すファイルを変えたいんです。

それが現状ではできない。

ちなみに前回のポリュビオス暗号の時は

ファイル名を定義する文を複数書いておいて

その時に使いたいもの以外はコメント化して扱っていました笑

それは面倒くさいし正直ダサいので

今回何とかしようと思ったわけです。

*コード

といってもそんなに難しいことはないです。

拍子抜けされてしまうかも?

まずは「txt_input」を書き換えましょう。

ほんとに簡単。

メイン関数から「txt_input」を呼び出すときに引数として

アクセスしたいファイルのアドレスを送るだけです。

今回の書き換えは関数を呼び出すメイン関数自体も書き換える必要があるので

ポリュビオス暗号のcodingを扱います。

Sub polybius_coding()

 

Dim str As String

 Dim str2 As String

 Dim file_name As String

 

'---------------------------------------------------------------

'strを読み込む

'---------------------------------------------------------------

 file_name = "ファイル名を記述"

 str = txt_input

'---------------------------------------------------------------

'strを暗号化

'---------------------------------------------------------------

 str2 = coding(str)

'---------------------------------------------------------------

'str2を記述

'---------------------------------------------------------------

 file_name = "ファイル名を記述"

 Call txt_output(str2)

 

End Sub

分かりますか??

「input_txt」を呼び出す前にfile_nameに値を入れて

それを引数としています。

次にFunction txt_input

Function txt_input(file_name) As String

 Dim ans As String

 

 Open file_name For Input As #1

    Line Input #1, ans

 Close #1

 txt_input = ans

End Function

前回よりもスリムになりました。

Function txt_outputもほとんど同じ変更です。

コードだけ載せます。

Function txt_output(str, file_name)

 

 Open file_name For Output As #1

    Print #1, str

 Close #1

 

End Function

こちらはさらにスリムですね。

いわゆるvoid型?っていうのかな?

そういうやつなので

  • まとめ

前回のライフゲームで学んだことですが

こういう「形式の修正」は早めに行って

そのサポートを受けた関数を書いていったほうが面倒がないです。

昔に書いたコードを対応させるためにちまちま書き直すときに

本当にみじめな気持ちになるので。

俯瞰というか大局観というか

そういうものが自分には足りていないんだろうなぁと反省。

というわけでなかなか先に進めなくてつらいのですが。

次回はもうひとつ「形式の修正」を行います。

現状では換字表をシートに貼り付けて扱っているのですが

それはかなり不安定な仕組みなので

そこをきちんとしましょう。

もう一つくらい暗号を書いてからやろうかなーとか思っていましたが

そういう甘えは味が変わって

二つの意味で辛くなるので。