C#:ファイルのデータを置換する簡易ツールの作成

文字列置換はサクラエディタを使用すると楽ですが、サクラエディタを使用した場合は大量データの処理ができないという問題があります。

そこで、C#をプログラムにより置換を行うというのが有効になります。
プログラムでのファイルのストリーム読み込みであれば、高速に処理することができ、大量データにも対応することができます。
また、C#のコンパイラはWindowsOSに標準で搭載されているので、環境設定が不要なのも便利な点です。

サンプルコードは以下です。
サンプルコードでは文字列の”hoge”を”fuga”に変換しているだけですが、バイナリファイルとして読み書きしている上に変換する文字は16進コードで指定しているため、ASCII文字以外の置換にも対応可能です。
また、ロジックを書き変えれば、より複雑な条件での置換も可能になります。

また、この記事に限りませんが、ソースコードをコピペする場合は、「[」を「[」、「]」を「]」、「<」を「<」、「&」を「&」に変換するようにお願いします。

【フォルダ構成】

【ソースコード】

・execute.bat

・replace.cs

【入力ファイル】

・input.txt

【出力ファイル】

・output.txt


今回も小ネタの紹介でした。
C#のプログラムはサクラエディタのマクロよりも複雑なことができる上、Windiows OSであれば環境構築不要ですぐに使用でき、文法もJavaプログラマーであればとっつきやすいものです。
ちょっとした作業自動化で用いると便利だと思います。

C#:自ユーザーのダウンロードフォルダーのパスの取得方法

C#(正確に書くと.Net)では、以下のように、WindowsOSで定められる特殊なフォルダのパスがEnumで定義されています。
https://learn.microsoft.com/ja-jp/dotnet/api/system.environment.specialfolder?view=net-8.0&viewFallbackFrom=windowsdesktop-8.0

自ユーザーのダウンロードフォルダの直接のパスはEnumに登録されていないようです。
しかし、ユーザーのプロファイルフォルダ(C:\Users\(自ユーザー名))のパスは登録されていますので、そのパスを起点にダウンロードフォルダのパスを定義することができます。

試しに、ダウンロードフォルダ上のファイルのパスを定義し、そのファイルを読み込んで出力するサンプルコードを書きました。
具体的な使用例は以下のコードを参照してください。
(ソースコードをコピペする場合は、「[」を「[」、「]」を「]」に変換するようにお願いします。)

【サンプルコード】

・Program.cs

【用意するファイル】

・C:\Users\(自ユーザー名)\Downloads\test.txt

【実行結果】


今回はちょっとした小ネタの紹介でした。
ダウンロードしたファイルに対して加工を行うツールを作る際に便利だと思います。

n対nマッチングのロジック(C#のサンプルコード付き)

以前に、以下の記事にて、マッチング処理のロジックについて書かせていただきました。
マッチング処理のロジック – サイゼントの技術ブログ

以前の記事では1対1マッチングと1対nマッチングについて説明しました。
今回の記事では、より複雑なn対nマッチングについて補足します。

1対1マッチングは、マスタデータの1つのキー項目に対して、トランザクションデータの0~1つのレコードが対応するものでした。
1対nマッチングは、マスタデータの1つのキー項目に対して、トランザクションデータの0~複数のレコードが対応するものでした。
n対nマッチングは、マスタデータ側も1つであるとは限らず、トランザクションデータの1つのキー項目に対して、マスタデータの0~複数のレコードが対応するケースもある、というものを指します。

n対nマッチングでは、以前に参照したトランザクションデータのレコードが、再び参照される可能性があります。
ファイルに対してランダムにアクセスすることでこれを実現できますが、処理が複雑になるため、今回はファイルは順次読み込みのままで、読み込んだトランザクションデータのレコードを一時的に退避するロジックを提示します。

フローチャートと例は以下の通りとなります。
また、この記事に限りませんが、ソースコードをコピペする場合は、「[」を「[」、「]」を「]」、「>」を「>」、「<」を「<」、「&」を「&」に変換するようにお願いします。

【フローチャート】

【例】

・要件

商品名が管理されている商品マスタと、商品の販売履歴(トランザクション)をファイル形式で読み込み、商品名と販売日を別ファイルで出力したい。

・商品マスタのフォーマット

カンマ区切りの固定長ファイル。
商品コードと商品副コードでレコードを一意に特定できるようにデータをセットする。

・販売履歴のフォーマット

カンマ区切りの固定長ファイル。
商品コード・販売日でレコードを一意に特定できるようにデータをセットする。

・出力ファイルのフォーマット

・プログラムのフォルダ構成

・ソースコード(execute.bat)

・ソースコード(matching.cs)

・商品マスタのレコード(files\master.csv)

・販売履歴のレコード(files\transaction.csv)

・バッチ実行結果(標準出力)

・バッチ実行結果(files\matched.csv)


あけましておめでとうございます!
お久しぶりです。

去年は慌ただしかったので記事を書けずにいましたが、要望があり、再びブログを更新することにしました。
ブログ以外の執筆活動もあるため不定期の更新になりそうですが、折を見て更新を続けていきたいと思います。

改めまして、よろしくお願いします。

COBOLのマッチング処理をC#で実装する

COBOLで使われているテクニックは過去のもののように思われがちですが、現在でもちょっとしたツールを作る時に役立ちます。
WindowsOS環境の場合は、ちょっとしたツールはC#で作るのが便利なので、今回はC#でCOBOLのマッチング処理を実装してみました。

今回は、下記の記事を参考に実装しています。
マッチング処理のロジック – サイゼントの技術ブログ

HIGH-VALUEを使う代わりにEOFを示すフラグ変数を使用しているので、その分だけ処理が複雑になっていることには注意してください。
また、この記事に限りませんが、ソースコードをコピペする場合は、「[」を「[」、「]」を「]」、「>」を「>」、「<」を「<」に変換するようにお願いします。

【フォルダ構成】

【ソースコード】

・execute.bat

・matching.cs

【実行前のファイル】

・files\master.csv

・files\transaction.csv

【実行結果】

execute.batをダブルクリックして実行する。

・files\matched.csv

・標準出力


Windows OSで作業や運用を行う場合は、C#を使いこなせると何かと便利です。
C#でツールを使う時に便利なソースコードは、これからも公開していきたいと思います!

C#:外部コマンド呼び出しの方法

javaプログラムからの外部コマンド呼び出しは別の記事に掲載したのですが、C#でも同様に外部コマンド呼び出しが可能です。
今回の記事では、「画面から外部コマンドを呼び出し、外部コマンドで出力されたファイルを取り込む」という機能をWindows Fromで実現したサンプルプログラムを紹介します。

【サンプルプログラム】

【呼び出されるバッチ】

・C:\tmp\HelloWorld.bat

【実行結果】


いかがでしたでしょうか。

プライベートでこのようなプログラムを作る機会があったので、記事として紹介してみました。
簡単な画面を作りたい時にC#のWindows Fromは便利で、今回紹介したような画面を実装すると社内ツールを作る時の表現の幅が広がったりします。