VBScript初心者です。
現在、あるファイル処理をするにあたり、メモリ・CPU負荷と、処理スピードの、
バランスの取れた方式を検討しようとしています。
やりたいこと:
ある対象ファイルに対する検索処理です。
対象ファイルはログファイルであり、全行に年月日日時分情報を含みます。
やりたい検索処理は以下です。
1.特定の時間帯(ex.13:00-15:00)の中に、キーワードAがあるかを検索
2.特定の時間帯(ex.15:00-17:00)の中に、キーワードBがあるかを検索
3.特定の時間帯(ex.13:00-17:00)の中に、キーワードCがあるかを検索
※「特定の時間帯」は1,2,3で異なりますが、ex.の通り、3の時間帯は1の時間帯+2の時間帯です。
※対象のログファイルは、「サイズが大きい=1GB以上」と前提してください。
現在考えている方式:
対象のログファイルを、3の時間帯で切り出し別ファイルで保存
→その「別ファイル」に対し1,2,3を実行
※検索は、ファイル内を1行ずつInStrする
知りたいこと:
メモリ・CPU負荷をなるべく掛けずに、処理スピードの速い方式を適用したいと思っています。
としたときに、「現在やろうとしている処理」を考えたのですが、
他によさそうな処理方式があれば、ご教示をお願いします。
「メモリ・CPU負荷を掛けない」と「処理スピードが速い」は両立するようなものでは
ないとは思いますが、バランスというか、コーディングにおいて最適とされている
作法みたいなものがあれば、知りたいと思っている次第です。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
> 特定の時間帯部分を一旦抽出して、それに対して1,2,3を実施したほうが効率が良いのかなと思いました。
で、その「特定の時間帯部分を一旦抽出」する方法って、「先頭から順番に全部の行を読んで、時間帯別に出力」ってなりませんか?
処理時間は
ファイルを分割して、対象時間帯だけで検索だと、
全部読む+全部の行の時間帯を判定する+時間帯毎に書き出す+ 特定時間分だけ読み込む+キーワード検索する
#2で書いた方法では
全部読む+全部の行の時間帯を判定する+(特定時間帯の場合に)キーワード検索する
となるでしょう。
前者は「時間帯毎に書き出す+特定時間分だけ読み込む」分長くなります。
(メモリ内で行われる)文字列からのキーワード検索等と比べて、ファイルの読み書きはとても時間のかかる処理です。
とても影響を無視できるものではありません。
これが
1'.特定の時間帯(ex.13:00-15:00)の中に、キーワードA'があるかを検索
1''.特定の時間帯(ex.13:00-15:00)の中に、キーワードA''があるかを検索
1'''.特定の時間帯(ex.13:00-15:00)の中に、キーワードA'''があるかを検索
....
等と同じファイルから、キーワードを変えて複数回検索するなら、 分割するために余分にかかった時間以上に、読み込むファイルを小さくしたことによる時間短縮が効果的になってきます。
回答ありがとうございます!
別ファイルを作るコストと、1行ずつ検索するコストのバランスが重要と解釈しました。
今回は、同じファイルに対し検索するのは3種類程度のため、実測してみることにいたします。
No.3
- 回答日時:
1さんの方法が一番現実的ですが、
通常、そういう検索をする場合は
OpenMode.Randomでファイル検索を行うのが有効です。
ググって調査してみては?
回答ありがとうございます!
OpenMode.Randomの情報ありがとうございました。
HITするかしないかを検索するだけなら、順アクセスよりランダムアクセスの方が
効率が良いと解釈しました。
No.2
- 回答日時:
検索して、その後どうするのですか?
その処理内容によっては違う方法もあるかもしれませんが、
ファイル全体を一通り読み込む必要があるなら、次のような単純な方法が結局最適になっているのではないでしょうか?
(1)ReadLine で1行読みこむ
https://msdn.microsoft.com/ja-jp/library/cc36443 …
(2) (1)で読み込んだ1行分の文字列について、 1.,2.,3.の処理をする
(3) ファイルの終わりまで (1)〜(2)を繰り返す
これが、同じファイルで何度も条件を変えて検索する、等となってくると、何かの工夫(データベースを使ってインデックスを付けるとか)があるといいかもしれませんが。
回答ありがとうございます!
>検索して、その後どうするのですか?
検索するだけです。「HITした」「しなかった」という結果により、正常/エラーを判定するだけのプログラムです。
ファイル内の特定の時間帯部分だけを検索すればよいので、全行に対して1,2,3をするよりは
特定の時間帯部分を一旦抽出して、それに対して1,2,3を実施したほうが効率が良いのかな
と思いました。
No.1
- 回答日時:
1GB以上とのことですが、ファイルサイズはどの程度でしょうか?1~2GB程度であればあまり効率を意識しなくていいと思いますが。
他の方法としては、事前にログファイルをfindstrコマンドでキーワードに引っかかるものだけど選択しておいてからVBSで読み込むというのもあるでしょう。
回答ありがとうございます!
>1GB以上とのことですが、ファイルサイズはどの程度でしょうか?1~2GB程度であればあまり効率を意識しなくていいと思いますが。
今やろうとしていること自体は、ファイルサイズ1GB程度のものを扱う予定です。
1GBファイルを対象に、簡単なサンプルを作って試しましたが、確かに2-3分もあれば終わるので、
意識しなくてもいいかもしれませんね。
ただ、後学のために、大容量ファイルを扱う場合のお作法も学んでおきたい次第です。
>他の方法としては、事前にログファイルをfindstrコマンドでキーワードに引っかかるものだけど選択しておいてからVBSで読み込むというのもあるでしょう。
findstrを使って事前加工する方式は、「対象のログファイルを、3の時間帯で切り出し別ファイルで保存」より負荷が軽い感じでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 法人税 電子帳簿保存法について 1 2022/04/07 11:17
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- WordPress(ワードプレス) WordPressのサイトにPDFをアップロードした際にGoogleなどの検索結果に出ないでほしい 1 2022/08/03 10:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- 運輸業・郵便業 1年以上仕事をしている場合 4 2023/04/28 18:39
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Wi-Fi・無線LAN WiFiが急に止まる 解決法 4 2023/08/27 21:09
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大きいサイズのテキストファイ...
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
VBに、Cのincludeのようなもの...
-
Excelマクロでの再読込み方法
-
dataファイルをxtxファイルにす...
-
ExcelVBA 定数宣言を外部ファイ...
-
読み取り専用ファイル FileStr...
-
Javascript で INI の読み書き
-
UTL_FILEにて既存のExcelに追加...
-
VB.netでTIFFファイルの読み込...
-
バッチで118項目のCSVを処理し...
-
【C#】リソースファイルの埋め...
-
fopenできる上限の変更
-
ファイル読み書き方法について...
-
JavaのFile書き込み
-
最近使ったファイルからファイ...
-
VBAにてEXCEL以外のファイル(テ...
-
ASP .NETでファイル選択ダイア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
テキストファイルの最終行を削...
-
大きいサイズのテキストファイ...
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
VBに、Cのincludeのようなもの...
-
グローバル変数のよくない使い...
-
C言語のfopenについて教えてく...
-
Excelマクロでの再読込み方法
-
SGファイルって何ですか?
-
ASP .NETでファイル選択ダイア...
-
VBAにてEXCEL以外のファイル(テ...
-
分割コンパイルの#defineについて
-
マウスポインタの変更
-
【C#】リソースファイルの埋め...
-
同じ名前のファイルを作った場...
-
fopenできる上限の変更
-
アプリケーション終了時例外エ...
おすすめ情報
ご紹介いただいたOpenMode.Randomについて調査してみたところ、
余計わからなくなりました…
VBScriptでOpenMode.Random(FileOpen関数)は使えるのでしょうか?
初心者につき、VBScriptとVisualBasicの違いも分かっていません。
その辺踏まえてご教示いただけると幸いです。