OmegaChartで,スクリーニングなどにおいて「インデックスが配列の境界外です」というエラーが発生し,この原因が『データファイルにゼロサイズのものがある』ことが疑われる場合に毎度毎度ゼロサイズのデータファイルを探して削除するのが面倒だったからです。
コマンドとバッチファイルで構成されます。
1.対象のフォルダ名に合わせて,バッチファイルを編集する。
バッチファイルの中身sweep.bat
SweepZeroFiles "C:\Program Files\Omega Chart\data"
pause
メモ:空白を含む場合,""で囲みます。
2.念のため対象のフォルダをバックアップする。
初めて使用する場合などは,バックアップしておくことをオススメします。
3.バッチファイルを実行する。
sweep.batをダブルクリックするなどして実行します。コマンドプロンプトウィンドウが開いてファイルの削除が実行されます。
4.結果を確認する。
[Dleted] C:\Program Files\Omega Chart\data\7608
[Dleted] C:\Program Files\Omega Chart\data\8080
File=3647, Dir=0 found.
File=7 deleted .
コマンドプロンプトに上記のようにレポートが表示されます。
意図しないファイルが削除されていないことなどを確認します。
ツールの性質上,誤ったフォルダ名を指定するなどすることにより,OSの動作に関連するファイルなどを誤って削除してしまうことが起こりえます。
充分注意した上での慎重なご使用をお願いします。
使い方やこの注意がよく理解できない場合は,ご使用を控えていただきたいと思います。
meiさんの,匣の向こう側というサイトのC# Tipsからほとんどそのままソースをいただいています。
http://www.ne.jp/asahi/nami/mei/index.html
検証環境は,
Windows XP ProfessionalEditionSP2
.NET Framework1.1
です。
おそらくその他の環境でも動作すると思われますが,検証はおこなっておりません。
名前 | ファイル | サイズ | バージョン |
コマンド | SweepZeroFiles.exe | 16kB | 0.01 |
バッチ | sweep.bat | 1kB | 0.01 |
任意のフォルダにダウンロードしてお使いください。
コマンドとバッチは同じフォルダに格納します。
ぶっちゃけエクスプローラでファイルサイズ順に並び替えて削除してもそんなに手間ではありません^^
しかしながら,データファイルをダウンロードするたびに手作業で削除するのは面倒でして。
OmegaChart本体で対応できるならしてもらったほうがええです。例えば,以下は,OmegaChartのerror.logですが,データダウンロード中に記録されたログの数が,ゼロサイズのファイルと同数なので。エラーなり例外出たところは,データファイルを生成しなければ済むだけのことですから・・・
2005/03/16 16:08:13 : レコード数が異常です
at Zanetti.DataSource.Specialized.KenMilleDataSource.ImportFullData(BasicBrand br, Byte[] buf) in C:\zanetti\v1\KenMille.cs:line 39
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 160
2005/03/16 16:12:17 : 日付フォーマットが不正です。
at Zanetti.DataSource.Specialized.KenMilleDataSource.TestDateFormat(Byte[] buf, Int32 offset) in C:\zanetti\v1\KenMille.cs:line 112
at Zanetti.DataSource.Specialized.KenMilleDataSource.ImportFullData(BasicBrand br, Byte[] buf) in C:\zanetti\v1\KenMille.cs:line 50
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 160
2005/03/16 16:26:11 : 日付フォーマットが不正です。
at Zanetti.DataSource.Specialized.KenMilleDataSource.TestDateFormat(Byte[] buf, Int32 offset) in C:\zanetti\v1\KenMille.cs:line 112
at Zanetti.DataSource.Specialized.KenMilleDataSource.ImportFullData(BasicBrand br, Byte[] buf) in C:\zanetti\v1\KenMille.cs:line 50
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 160
2005/03/16 16:26:43 : リモート サーバーがエラーを返しました : (404) 見つかりません。
at System.Net.HttpWebRequest.CheckFinalStatus()
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.HttpWebRequest.GetResponse()
at Zanetti.Util.HttpDownload(String url) in C:\zanetti\v1\Util.cs:line 101
at Zanetti.DataSource.Specialized.KenMilleDataSource.DownloadFullData(BasicBrand br) in C:\zanetti\v1\KenMille.cs:line 22
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 159
2005/03/16 16:28:46 : レコード数が異常です
at Zanetti.DataSource.Specialized.KenMilleDataSource.ImportFullData(BasicBrand br, Byte[] buf) in C:\zanetti\v1\KenMille.cs:line 39
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 160
2005/03/16 16:32:43 : 日付フォーマットが不正です。
at Zanetti.DataSource.Specialized.KenMilleDataSource.TestDateFormat(Byte[] buf, Int32 offset) in C:\zanetti\v1\KenMille.cs:line 112
at Zanetti.DataSource.Specialized.KenMilleDataSource.ImportFullData(BasicBrand br, Byte[] buf) in C:\zanetti\v1\KenMille.cs:line 50
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 160
2005/03/16 16:37:17 : レコード数が異常です
at Zanetti.DataSource.Specialized.KenMilleDataSource.ImportFullData(BasicBrand br, Byte[] buf) in C:\zanetti\v1\KenMille.cs:line 39
at Zanetti.DataSource.FullDataSource.Process() in C:\zanetti\v1\DataSource.cs:line 160
これに関連して,「データファイルチェッカ」の実装も検討しています。
このツールは自己責任でお使いください。