質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

1回答

13767閲覧

vbs  検索対象の文字列を含む文字列を検索し、別ファイルに高速に出力したい。

uujh

総合スコア13

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2019/06/19 08:21

前提・実現したいこと

######前提ファイル
①ID.txt  ②hoge.csv   result.csv
11   "aa", "11"   "aa", "11"
12   "bb", "12"   "bb", "12"
13 ⇒ "cc", "13" ⇒ "cc", "13"
14 instr  "dd", "14" 出力 "dd", "14"
15  "ee", "19"  

######実現したいこと

上記のようなファイルが存在し、①の1行目から②のファイル
対してInstr関数にて順次検索を行い、マッチすれば別テキストに
出力を行うスクリプトを作成しています。

発生している問題・エラーメッセージ

問題として実行速度が遅いことが問題です。
以下のような方法を試してみましたが、期待する実行時間までには改善ができませんでした。

なにか別のアルゴリズムがあればご教示いただけないでしょうか。

試したこと

①のテキストを4分割し、非同期処理にて
②のファイルに検索を行う、という方法です。

該当のソースコード

以下ようなの処理のスクリプトをmainファイルから非同期にて4並列にて実行を行っています。
分かりずらい変数名で申し訳ございません。
実際のコードの一部分を抜き出しております。

vbs

1' 読み込みファイル 2' 実際にはここで4分割されたファイルが読み込まれています。 3Dim idtxt 4Set idtxt = fso.OpenTextFile( "ID.txt", 1, False, 0) 5 6' 書き出しファイル 7Dim resultFile 8Set resultFile = fso.OpenTextFile( "result.csv", 8, True) 9 10 11Do Until idtxt.AtEndOfStream 12 13 ID = idtxt.ReadLine 14 ' 検索対象ファイル 15 Set hogeCsv = fso.OpenTextFile("hoge.csv", 1, False, 0) 16 Do Until hogeCsv.AtEndOfStream 17 18 line = hogeCsv.ReadLine 19 20 ' 比較 21 If InStr(line, ID) <> 0 Then 22 '一致 23 resultFile.WriteLine line 24 Exit Do 25 End If 26 27 Loop 28 29Loop

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

hoge.csv の内容を一旦 Dictionary オブジェクトに読み込んで検索するのが良いと思います。

https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dictionary-object

ただ、罠もあるのでお気をつけください。

https://qiita.com/mather314/items/2d53dc79c3771d99b910

投稿2019/06/19 08:33

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問