INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2012-07-19 01:51 / 次へ→ / 最新へ⇒

■複数行置換/改行コード変換のコマンドライン版のテスト

2012年 7月19日(木) 1:51:56 [はてなダイアリーから転記]



RSSRSS配信中
https://www.inasoft.org/



一昨日と昨日で、「複数行置換 ver.1.82α」「改行コード変換 ver.1.15.00α」を公開しました。

https://www.inasoft.org/

どちらも、コマンドラインによる実行を補助するプログラムを追加したものとなっています。

これらのプログラムのコマンドライン版については、以前よりユーザー要望の来ていたものでした。

ただ、その実現方式をどうするか、悩んでいました。

  • 全く新しい完全コマンドラインプログラムを作るか
  • 今までの資産を生かせる形で、コマンドライン補助プログラムを作るか

これについては、後者を採用することとしました。

コマンドライン版プログラムは、引数を処理した後、GUI版プログラムを呼び出し、本処理はGUI版プログラムの方で行います。GUI版プログラムは自動実行・自動終了し、コマンドライン版プログラムへ処理が戻ります。

引数情報の引き継ぎは、レジストリやiniファイルを経由して行います。

(設定の読み込み部分の資産も流用したかったので)

次に、複数行置換への引数の渡し方をどうするか、です。

コマンドラインは単一行ですから「複数行置換」をするための複数行情報を渡すことができません。

  • 入力コンソールから、置換前複数行文字列・置換後複数行文字列を入力する
  • 置換前複数行文字列・置換後複数行文字列を入れたファイルを準備して、そのファイル名を引数として渡す

こちらについては、試験的な試みとして、後者を採用しています。

今回の実現方式は、あくまで試験的な試みです。

この試みを見て「ああした方がいい」「こっちの方がいい」などの意見がありましたら、是非お寄せ頂きたいと思います。

ちなみに、GUI版プログラムから、呼び出し元のコマンドラインのウィンドウにメッセージを表示する方法も、今回は色々試しました。

今回は実験的に、

  • 改行コード変換では、親プロセスのコンソールウィンドウに直接、アタッチして文字列出力
  • 複数行置換では、親プロセスからパイプ付きでGUI版プログラムを起動し、パイプ経由で文字列を受け取り、親プロセス側にて文字列を表示

を行っています。

複数行置換は .NET Framework のプログラムですから、親プロセスのコンソールウィンドウへのアタッチのためには Win32 API を呼び出す必要があり、ちょっと面倒だったので。

(.NET Framework では、Win32 API を呼ぶには「一手間」必要です。今回は4行のおまじないが必要でしたが、その4行が面倒くさかった)

逆に改行コード変換では、ネイティブC++プログラムですから、親プロセスのコンソールウィンドウへのアタッチも、Win32 API を呼び出せばいいだけだし。ちなみに子プロセスがGUI版プログラムの場合、「子プロセス実行中の、親プロセスの一時停止」についても気を遣う必要があるのですが、ここでは _spawnlp() の _P_WAIT を使ってしまえばいいことに気づきました。色々らくちん。

ちなみにパイプを使った場合、コンソールへの出力では printf だけでは物足りないらしくて、そのあとに fflush(stdout) をしないといけないようですね。これも、面倒くさかった。

というわけで、この方式で行こうかと思います。





目次 | ←前へ / 2012-07-19 01:51 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3129132 (+0064)[+0447]

Copyright© 2010-2024 INASOFT