sogayaのプログラミング

さらしの集計、トリシーカー、ビンゴマスク、ロトサマリー

Java版のGrepに基づいてC#で構築

AceGrepをアップロードしました! Java版のGrep(Version 1.28)に基づいて、C#でAceGrepを構築しました。AceGrepは、コンソールアプリケーションです。AceGrepは、WindowsのDIRコマンドを実行して、検索対象のファイルのリストを作成します。ファイル名のリストをfileName.txtと命名します。acegrepコマンドのパラメータとして、-uが付加された場合、AceGrepは、lsコマンドを実行して、fileName.txtを作成します。DIRコマンドと異なり、lsコマンドは、ファイル名の大文字と小文字を区別します。lsコマンドと同様に、AceGrepに内蔵のAceListは、ファイル名の大文字と小文字を区別できます。acegrepコマンドのパラメータとして、--inが付加された場合、AceGrepは、DIRコマンドもlsコマンドも実行しないで、AceListでfileName.txtを作成します。事前に利用者がfileName.txtを用意した場合、しかもacegrepコマンドのパラメータとして、-b-が付加された場合、AceGrepは、DIRコマンドもlsコマンドもAceList機能も実行しないで、利用者提供のfileName.txtを使用します。DIRコマンドではなくlsコマンドを利用する場合、利用者は、UNIXのシェルのワイルドカードを使用できますが、ファイル名の正規表現も使用できます。同様に、AceGrepに内蔵のAceListを利用する場合、UNIXのシェルのワイルドカード正規表現も使用できます。コマンドプロンプトのウィンドウとは独立したSideAceウィンドウが表示されます。SideAceは、ACEを監視しています。リダイレクトでACEに書き込まれたとき、SideAceウィンドウに内容を表示します。SideAceは、ACEをUTF-8で保存できます。Visual C# 2008 ExpressまたはVisual Studio 2010で構築されています。.NET Framework 3.5または.NET Framework 4を利用できます。ソースコードを添付しました。アーカイブのファイル名は、AceGrep.zipです。-u -gが指定された場合、AceGrepは、カレントディレクトリにあるファイルのパス名を表示しますが、パス名を表示しないように命令するには、パラメータとして、-p-を付加してください。-uのみである場合、シェルのワイルドカードによりカレントディレクトリを検索できます。-uおよび-gが指定された場合、シェルのワイルドカードまたは正規表現によりカレントディレクトリを検索できます。-uおよび-rが指定された場合、シェルのワイルドカードまたは正規表現によりカレントディレクトリおよびサブディレクトリを検索できます。ただし、-u -rの場合、多数のファイルを引用符で囲んでlsコマンドにわたすことができません。-uおよび-gが指定された場合も、-uおよび-rが指定された場合も、AceGrepは、引用符で囲まれた多数のファイルを処理できませんが、AceGrepに内蔵のAceListは、空白で分離されており引用符で囲まれている多数のファイルを順次、処理できます。AceListは、WindowsC#で書かれていますが、コマンドプロンプトワイルドカードを利用しません。パラメータとして、--inを付加した場合、acegrepコマンドにシェルのワイルドカードを付加してください。シェルのワイルドカードが正しい正規表現に変換されたか確認するには、--reを付加してください。AceGrepは、DIRコマンドでfileName.txtを作成する工程と、正規表現にマッチする行を各ファイルから抽出する工程とからなります。fileName.txtを作成する時間および実行の開始から終了まで経過した時間を表示するには、パラメータとして--elapseまたは-@を付加してください。1ミリ秒の単位で表示されます。fileName.txtを作成する時間は、経過時間に含まれます。1ミリ秒未満を測定できないため、AceGrepのミリ秒の数値は、測定が不正確です。パラメータとして、--tickが付加された場合、AceGrepは、C#のStopwatchクラスを利用して、計数(tick)を表示します。ミリ秒および計数を併用できます。acegrepコマンドのパラメータとして、-#を付加することで、CHCP実行結果の一部を出力できます。標準出力をリダイレクトしたファイルの文字コードは、MS932であることがわかります。日本語のコードページは、932ですが、英語(アメリカ)のコードページは、437または1252です。パラメータとして、--encoding=CP437を付加できます。日本語版Windows文字コードは、Windows-31Jですが、英語版Windows文字コードは、Windows-1252です。パラメータとして、--encoding=CP1252を付加できます。AceGrepにC#版のSideAceを添付しました。これは、Windowsフォームアプリケーションであり、SideAceウィンドウを表示します。SideAceは、ACEというファイルを作成します。ACEは、Windowsのファイル名であるため、大文字と小文字が区別されません。SideAceは、ACEを監視しています。AceGrepの出力をACEにリダイレクトしたとき、SideAceウィンドウに出力が表示されます。コマンドプロンプトは、いわゆる折り返しを行います。この場合、論理的な1行は、多数の行として表示される場合があります。コマンドプロンプトと異なり、SideAceウィンドウは、論理的な1行を1行で表示します。この場合、長すぎる行は、左側にある一部しか表示されません。ACEは、MS932のファイルでしたが、UTF-8のファイルとしてACEを保存するには、SideAceウィンドウのFileメニューからLeaveを選択してください。SideAceウィンドウは、閉じられます。SideAceウィンドウを大きくするには、Largeボタンを押してください。さもなければ、HelpメニューからLargeを選択してください。標準のサイズに戻すには、HelpメニューからStandardを選択してください。最大化されたウィンドウと異なり、大きいウィンドウは、タイトルバーをドラッグすることで画面を移動できます。詳細は、AceGrepユーザーズガイド(PDF)を参照してください。

Grepの出力をACEにリダイレクト

Java版のGrepを刷新しました! 間違いを訂正してきました。現在のバージョン番号は、1.27です。バージョン1.27の特徴として、Swing版のSideAceと連携します。コマンドプロンプトのウィンドウとは独立したSideAceウィンドウが表示されます。SideAceは、ACEを監視しています。リダイレクトでACEに書き込まれたとき、SideAceウィンドウに内容を表示します。SideAceは、ACEをUTF-8で保存できます。トリシーカーからダウンロードできます。Java版のGrepに関するユーザーズガイド(PDF)の閲覧および保存が可能です。Unixgrepコマンドは、正規表現にマッチする行をファイルから抽出します。grepに類似のコマンドとして、FINDSTRコマンドがWindowsに用意されていますが、コマンドのパラメータが異なるため、FINDSTRは、grepではありません。Java版のGrepは、grepに似ています。grepと異なり、Java版のGrepは、fileName.txtの各行から文字コードを捕捉できます。事前に、利用者は、検索対象のファイルのリスト(fileName.txt)の各ファイル名に文字コードを記入できます。バイナリファイルに基づいて新しいテキストファイルを作成する機能で、Java版のGrepは、カレット(^)および英字で制御文字を表現できます。たとえば、01hを^Aに置換できます。添付のatnd.exeがWatcomで構築されていることを確認するには、パラメータとして、-[を付加してください。一時ファイルがCCC番号-分-秒.txtの形式で命名されます。正規表現にマッチする行を新しいテキストファイルから抽出します。正規表現にマッチする行をカウントして、合計が0ではない場合のみファイル名および行数を出力するには、Grepのパラメータとして、--ceを付加してください。Unixgrepコマンドは、--ceがありません。正規表現にマッチする行を発見したら、ファイル名を出力して、カウントしないでファイルを閉じて、次のファイルに着手するには、パラメータとして、-l(マイナスエル)を付加してください。-uおよび-rが指定された場合、シェルのワイルドカードまたは正規表現によりカレントディレクトリおよびサブディレクトリを検索できます。パラメータとして、多数のハイフン+文字を入力するのではなく、利用者は、1個のハイフンに続けて文字列を入力できます。この場合、Java版のGrepは、文字列を多数の文字に分解して、ハイフンを各文字に前置します。たとえば、-curjは、-c -u -r -jを意味します。-xが指定された場合、Java版のGrepは、自動的に正規表現の直前にカレット(^)を付加して、正規表現の直後にドル($)を付加します。^は、行頭を意味します。$は、行末を意味します。Unixgrepは、区切り文字としてコロン( : )を使用します。Windowsでは、CドライブをC:として表現するため、Java版のGrepは、区切り文字として、単なるコロンではなく、コロンおよび空白を使用します。Java版のGrepが区切り文字テキスト(separate.txt)から区切り文字を読み込んで、コロンおよび空白ではなく、新しい区切り文字を使用するように命令するには、パラメータとして、-Sを付加してください。Sは、大文字です。/に変更できます。╋┏┗┣┃などの罫線文字が区切り文字テキスト(separate.txt)に記入された場合、Java版のGrepは、区切り記号として読み込むことができます。区切り文字テキストに┃を記入して、Java版のGrepに-Sで読み込ませることができます。Java版のGrepのパラメータとして、-#を付加することで、Javaのプロパティとして、file.encodingの値を出力できます。標準出力をリダイレクトしたファイルの文字コードは、MS932であることがわかります。バージョン番号を表示する-Vは、-#と併用できます。-Ke, -Ks, -Ku, -Kw,は、それぞれ、EUC-JP, Shift_JIS, UTF-8, MS932を意味します。-8は、-Kuと同じ結果を生じます。Swing版のSideAceにdoubleClick.exeを添付しました。エクスプローラーでdoubleClickというアプリケーションを表示してダブルクリックすることで、SideAceウィンドウを表示できます。doubleClickは、SideAceウィンドウからユーザーズガイド(PDF)を閲覧するために必要です。作業フォルダでSideAceウィンドウを開いてから、コマンドプロンプトを開いてください。CDコマンドでdoubleClickのカレントディレクトリに移動してください。Java版のGrepのパラメータとして、--aceを付加しても、SideAceウィンドウを開くことができます。詳細は、ユーザーズガイド(PDF)を参照してください。

f:id:sogaya:20181028162644p:plain

Command Prompt and SideAce

SideAceウィンドウ

 

C#版のColonYen

C#版のColonYenをアップロードしました! ColonYenは、設定ファイルに記載のディレクトリに移動して、コマンドプロンプトを起動して、コマンドプロンプトウィンドウのサイズを変更します。コマンドプロンプトが起動したら、ColonYen自体は、終了します。C++版のColonYenは、Borland無料コマンドラインC++コンパイラBorland C++ 5.5.1 for Win32, bcc32)でWin32APIを利用して構築しましたが、C#版のColonYenは、Visual C# 2008 Expressか、Visual Studio 2010のいずれかで構築されたWindowsフォームアプリケーションです。並行して構築したため、両方のソースコードは、同等です。コマンドプロンプトのプロパティのウィンドウでは、利用者は、コマンドプロンプトウィンドウのサイズとして、幅を桁数で指定し、高さを行数で指定します。コマンドプロンプトのプロパティと異なり、ColonYenでは、利用者は、画素(ピクセル)の単位で幅および高さを指定できます。たとえば、13行のバッファサイズ、32桁、13行に設定すれば、スクロールバー無しの正方形になります。参考値の表によれば、276の幅、276の高さをそれぞれColonYen.txtの第5行および第6行に記入すればよいことがわかります。利用者が行数を指定するだけで、デフォルトのコマンドプロンプトと相似である小さい長方形を表示できます。タスクマネージャーからプロセスを選択して終了するのではなく、ColonYenのメニューからTerminate(ターミネート)を選択することで、コマンドプロンプトを終了できます。ColonYenは、Windowsの32ビットアプリケーションです。Windows XP, Windows 10でも作動しますが、ColonYenユーザーズガイドは、Windows VistaおよびWindows 7でColonYenを使用することを想定しています。2メガバイトのColonYen.pdfを添付しました。Windowsフォームアプリケーションとして、半透明を利用します。Win32APIを使用します。コマンドとして、CMD, FINDSTR, MODE, START, TASKKILL, TASKLIST, VERを利用します。ColonYenは、起動支援ソフトウェアです。想定される実行ファイルとしては、bash, cmd, java, powershellなどがあります。コマンドプロンプトからダウンロードできます。

FLTK版のRannu

Rannuは、乱数表を作成します。乱数は、二桁の十進数です。最小値、最大値を設定できます(たとえば、1から37まで)。空白ではなくコンマを挿入してCSVを作成するには、FileメニューからCSVを選択してください。rannu.csvが作成されます。Rannuを設定するために、manage.txtという管理ファイルが用意されています。Manageウィンドウでは、乱数表のサイズとして、KB(キロバイト)のテキストボックスにrannu.txtのサイズを入力してください。右詰(みぎづめ)で表示するには、KBをクリックしてください。乱数表の行数を指定できます。行数ではなくキロバイトでファイルのサイズを決定したいことを明示するには、行数として2147483647を指定してください。rannu.txtの行数がこうした巨大な数に達する前に、Rannuは、指定のキロバイトで書き出しを終了します。Rannuは、Mersenne Twister (MT, メルセンヌツイスタ)およびxorshiftの擬似乱数発生器(PRNG)を実装しています。SettingメニューからMTかxorshiftのいずれか選択してください。PRNGのシード(種)として、1から999999までの整数を想定しています。seedのテキストボックスにシードを入力してください。利用者が0を入力した場合、Rannuは、自動的に年月日時分秒に基づいてシードを決定します。PRNGの設定として、シードだけではなくアイドリングも設定できます。たとえば、利用者がアイドリング回数を400に設定した場合、Rannuは、シードに基づいて連続して発生した400個の乱数を無視します。401回目以降をrannu.txtに書き出します。SettingメニューからGroupingを選択した場合、Rannuは、MTから生成された乱数を6ビットずつ利用して、0から63まで発生します。Rannuは、cou99コマンドの機能を内蔵しており、二桁の数字をカウントして表を作成できます。算術平均および分散を計算できます。平均を計算してから、分散を計算するのではなく、期待値を利用して分散を計算します。たとえば、81から90まで、でたらめに書き出すならば、期待値は、85.5です。Rannuは、毎秒1回の頻度でmanage.txtの時刻を取得します。前回の時刻と異なる場合、manage.txtは、更新された可能性があるため、Rannuは、自動的にmanage.txtを読み込みます。Windows 2000のパソコンにDev-C++ 4.9.9.2をインストールしました。さらに、FLTK 1.3.0のDevpakをインストールしました(fltk-130-1gp.DevPakをPackman.exeにトラッグしてドロップしました)。Dev-C++IDERannuを構築しました。FLTKGUIを提供します。Rannuは、GUIを提供する32ビットアプリケーションです。Windows 2000, Windows XP, Windows 7, Windows 10で作動します。半角の¥ではなくバックスラッシュ(右下がりの斜線)でパス名の区切りが表示されます(日本語のパス名をサポートしていない?)。ステータスバーに表示された文字列をクリップボードにコピーするには、SettingメニューからCopyを選択してください。コマンドプロンプトにコマンドおよびパラメータを入力して起動できます。パラメータが無い場合、Rannuは、manage.txtに従います。詳細は、PDFを参照してください。

f:id:sogaya:20170714234436p:plain

Swing版のGize

Gizeは、ビンゴ5集計ソフトウェアです。Swingは、JavaGUIライブラリです。Javaを実行する環境でGizeを利用できます。doubleClick.exeが添付されており、WindowsエクスプローラでdoubleClickを表示してダブルクリックすることで、Gizeのウィンドウを生成できます。Gizeのユーザーズガイドを添付しました。Gizeのユーザーズガイドは、3行3列ではなく04 08 15 /19 21 /28 34 40 //のように1行で表現されたビンゴ5を1行のビンゴ5と表現します。Gizeは、1行のビンゴ5を想定しています。3行3列のビンゴ5を統合して、1行のビンゴ5を生成する機能があります。1-2-3のライン、4-6のライン、7-8-9のラインの三つ組を斜線で区切って1行で表現します。Gizeの管理ファイルは、manage.txtです。manage.txtの第12行が0ではない場合、Gizeは、自動的に3行3列の探知を開始します。少なくともひとつの3行3列を検出した場合、Gizeは、自動的に3行3列を1行のビンゴ5にして、who.txtを上書きします。2個のCSVファイルを作成します。一方は、レス番号の順であり、もう一方は、成立したラインの本数に関して降順に(逆順に)並べ替えられています。これにより、高額当せんを容易に発見できます。Matrixページに3行3列のビンゴ5を左右に表示するには、まずTripletページの右上にあるテキストボックスに1行のビンゴ5を入力してください。次に、FileメニューからMatrixを選択してください。Swing版Gizeのzipファイル名は、GizeSwing.zipです。PDF.htmlをGizeSwing.zipに置換すればダウンロードできます。

http://sogaya.web.fc2.com/PDF.html

f:id:sogaya:20170523235847p:plain

gizeとannuy

gizeコマンドおよびannuyコマンドをダウンロードできます。annuyコマンドは、ビンゴ5を高速に選択してannuy.txtに書き出します。annuy.txtの各行は、ビンゴ5を1行で表現します。斜線を改行文字に置換すれば、3行3列に見えます。gizeコマンドは、ビンゴ5の当せん者を発見して、購入数字、成立したライン、当せん者名を書き出します。gizeコマンドは、1行のビンゴ5を想定しています。くじ券と同様に、3行3列のビンゴ5が2つ横に並べられている場合、gizeコマンドは、左上のマス(マス1号)が01, 02, 03, 04, 05のいずれかであることを確認して、3行3列を統合して、1行のビンゴ5を生成する機能があります。この機能を利用する前に、gizeコマンドは、全角数字を半角数字に修正します。ロト7は、一致したボールの個数で判定します。ロト7と異なり、ビンゴ5は、途切れないラインの本数で判定します。ビンゴ5の判定は、そのぶん複雑になりますが、ビット演算で容易になります。どのラインが成立したかわかるウェブページを作成しました! annuyコマンドは、Watcomで構築されており、Cのソースコードを添付しました。mt19937ar.hおよびmt19937ar.c(メルセンヌツイスタ、MT)を使用している32ビットアプリケーションです。gizeコマンドは、GCCまたはBorland無料コマンドラインコンパイラBorland C++ 5.5.1 for Win32)で構築できます。C++ソースコードを添付しました。バグ、間違いがあるかもしれません。改良して有用なソフトウェアにしたいと思います。gize.pdf

f:id:sogaya:20170406235103p:plain

DFL版のviewXBM

きょう初めてDFL版のGUIソフトウェアをアップロードしました! DFLは、D言語GUIライブラリです。ZIPのファイル名は、viewXBM_DFL.zipです。C, D, DFLが利用できる環境で、viewXBMを構築しました。Windows 2000のパソコン(Pentium 4プロセッサ)に、Digital Mars D Compiler v1.030をインストールして、さらにD Forms Library Version 0.9.8 Beta (DFL)をインストールしました。Digital Mars Compiler Version 8.42nもインストールされています。ソースコードおよびdflvi.batを添付しました。viewXBM.resのリソースファイルを作成するには、たとえば、rccvi.batを使用します。viewXBM.exeおよびmanage.txtが同一のフォルダにあります。XBMは、UNIXのモノクロ画像形式です。各点の真の色彩は、黒ですが、濃紺の矩形(くけい)で表現されます。manage.txtの第2行に4を記入して、第3行に4を記入した場合、各点として、正方形は、4の幅、4の高さで表示されます。プログラミング言語としてDを使用したため、UTF-8文字コードを想定しています。C版のsjisUTF8を添付しました。sjisUTF8コマンドは、シフトJISのテキストファイルをUTF-8のテキストファイルに変換します。DFL版のviewXBMは、Win32API版のviewXBMより遅い。viewXBM.pdf

f:id:sogaya:20170316222328j:plain