質問: あるNW機器のConfigとそのパラメータシートを比較して、この設定はパラメータシートと合っているな!と比較していきたいです。 Config同士、パラメータシート同士であれば、WinMergeやDF等を使用して比較すれば良いと思います。 しかしながらConfigとパラメータシートを比較する場合は単純にWinMergeやDF等を使っての比較ができません。 またバージョンも複数あり、それらのバージョン間の差分もありえ、そのバージョンアップも頻繁です。 こういった場合に簡単に比較する為にVBAを使用しようかと思いましたが、v1とv2を比較するVBAを作成する事はできてもv3が出てきた場合にV1とv3を比較しづらくなります。(もう一度VBAを作り直す必要があるため。) その為、一旦Configの内容やパラメータシートの内容をDBに取り込んで、それの同一かどうかを検証するようにすればバージョンが変わったとしても修正がしやすいのではないかと思っております。 しかしながらDBを構築した経験が無く、どの程度で出来るのか検討がつきません。 また、今回作成するDBは可視性を最優先にして、難しくない構文で作りたいと思っております。 MySQLを使えば良いのでは無いかと考えておりますが、どなたか詳しい方、教えていただけませんでしょうか。 やりたい事はConfigAとパラメータシートの比較で同一か異なっているかどうかを判定するだけでいいのです。(異なっている場合はその内容は人が精査するので) 追記 -- パラメータシートの例 ---------- 実際はより複雑ですがイメージは変わりません。 ![パラメータシートの例です。実際はより複雑ですがイメージは変わりません。](https://i.stack.imgur.com/JFoNx.png) configの例 -------- ``` network src 1.1.1.1 255.255.255.0 dst 2.2.2.2/32 Routing OSPF v2 ``` このような形です。実際にはバージョン差分で表記内容が `src⇔source` となったり、`/32` の部分が`255.255.255.255` となったりします。 とっかかりを何とか教えていただければ助かります。 また、誤解をさせてしまったかもしれませんが、必ずしもVBAにこだわっている訳ではありません。Pythonとかでも良いのですが、可視性が簡単でメンテしやすく、また私がネットワークエンジニアでプログラマーでは無い為、分かりやすい(見やすい処理)で書きたいと考えております。
回答: とっかかりということですので、システムの設計だけを考えましょう。 煩雑になるので処理の内容を細かく記述することはしません。 まず、仮定を置かせていただきます。現実と齟齬があるかもしれませんがご容赦ください * 設定がパラメーターシートに入る + これは頻繁に変更されるが最新のものと比較すればよい * コンフィグは複数ありバージョンアップが頻繁にある ここでは単純にするために名前と、IPとサブネットの組を比較するシステムを検討します テーブルは以下のものをパラメーターシート(テーブルA)とコンフィグ用(テーブルB)に準備するものとします。 !画像の説明をここに入力 パラメーターシートの管理方針は、'name'は同じ設定間で統一し'create_date'で世代を管理するものとします。 コンフィグの管理方針は'name'で機器を管理し、'version'で設定の世代を管理します。 この内容でテーブルを作成して比較するものとします。 次に、ここにデータを挿入するためのプログラムと、 ふたつを比較するためのプログラムの二つが必要でしょう。 まず、各データソース(情報源)からデータの抽出を行い、 作成したテーブルに挿入する命令を作成します * パラメーターシートはExcelに入力されているので、各セルからデータを取得しテーブルAに挿入するプログラムを作成します。 * コンフィグはテキストファイルに記述されているのでこれを文字列解析してテーブルBに取り込むプログラムを作成します この時入力値を正規化するかを検討します。この場合はサブネットマスクの記法を255.255.255.255や/24の形に統一するかどうかなどです。(この時点で正規化しておけば後の比較は楽になります)。ラベル部分がsrcかsourceかなどの吸収はプログラムで行います。 最後に比較する命令を作成します。まずコマンドはパラメーターシート[foo]の内容と機器[bar]のコンフィグの最新の内容を比較する場合。 ``` compare foo bar ``` バージョン(例では2)を指定する場合は ``` compare foo bar 2 ``` という感じになるでしょうか。この仕様に基づきテーブルからSELECT文でデータを抽出し比較するためのプログラムを記述します。この際、入力された文字列に対するフォーマット(形式)の差異は吸収して比較するようにします。 長くなりましたがシステム制作の概要をとらえることができましたら幸いです。 自動化などいろいろする余地はありますし、人によって記述するプログラムや組み合わせなども変わってくると思います。それなりに時間のかかる工程です。 実現するシステム構成ですが、ExcelがからむのでしたらVBAでその部分は書いてしまうというのがとっかかりとしてはよいかもしれません。テキストファイルも読むことはできますし、一通りVBAの中で完結させることもできるのではないかと思います。本格的にシステムを組みたくなったら、C#やVB.NETなどマイクロソフト系の開発言語に移行していくこともできます。 まずはSQLiteなどでテーブルを準備してVBAでデータを挿入するところから始められてはいかかでしょうか?