• ベストアンサー

VB6:テキストファイルから特定の文字列に続く数値を抜き取りたい

お世話になっております。 Visual Basic 6にて テキストファイルaから特定の文字列に続く数値を 抜き取りたいと思っております。 テキストファイルaのパス: C:\a_file.txt テキストファイルaの内容: トヨタ自動車(株) (東証1部:7203),取引値15:00 4,100,1株配当45.00円 抜き取り後のテキストbの内容: 7203 15:00 4,100 45.00 抜き取り後のテキストファイルbのパス: C:\b_file.txt ”東証1部”の次、”取引値”の次、というように特定の文字列の後に抜き取りたい数値があるので、InStr関数やMid関数を用いればできるのではないかと思い。 以下のようにしてみました。 ---コード:ココカラ Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("C:\a_file.txt", True) Set b = fs.CreateTextFile("C:\b_file.txt", True) data = Mid(a.innerText, InStr(a.innerText, "1株配当") + 5, 7) b.Write (data) ---コード:ココマデ data = Mid(a.innerText。。。の行でエラーが出ます。 エラー内容:(実行時エラー438)オブジェクトはこのプロパティまたはメソッドをサポートしていません このエラーの部分を解決できれば、本問題解決への糸口になるのではと思っております。 すなはち、テキストaから特定文字列”東証1部”の位置検出、文字切り出しをまず解決したいと思っております。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 基本的にFileSystemObjectの使用方法を間違っているのでは? CreateTextFileメソッドは、新しいテキストファイルを作成するもので、既存のファイルの内容は読み込めません。 既存ファイルの読み込みは、OpenTextFileメソッドです。 また、CreateTextFileにしろ、OpenTextFileにしろ、TextStreamオブジェクトを返しますが、 TextStreamには、innerTextメソッドなんてないと思いますが。 データを読み込むなら、ReadAllメソッドかReadLineメソッドです。 したがって、こんな感じ Dim temp As String Dim data As String Dim fs As Object Dim a As Object Dim b As Object Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.OpenTextFile("C:\a_file.txt", 1) temp = a.ReadAll Set a = Nothing data = Mid(temp, InStr(temp, "1株配当") + 5, 7) Set b = fs.CreateTextFile("C:\b_file.txt", True) b.Write data Set b = Nothing Set fs = Nothing あとは、Mid、Left、Right、InStrなどの文字列関数を駆使して抜き出しましょう。 なお、ファイルシステムオブジェクトについては、以下のページを参考にして下さい。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

ギブアップの記。 (1)東証1部、1株の中の数字 (2)項目区切りのカンマと金額数字桁どりのカンマ などがあり、相当「本件限りで統一されている条件に」頼らざるを得ないと思う。 手馴れたエクセルVBAでやったので、VBにReplace関数が 無ければ自作してください。 東証1部:、取引値、1株配当、円はWebページを通じて 共通と仮定している。東証2部の場合があれば、1行増やしてください。 スペース区切りに持ちこんで。Split関数を使いました。 4100円は位取りのカンマのため、一旦2つに分かれるが、再計算しました。 Sub test01() s = Cells(1, 1) s = Replace(s, ",", " ") s = Replace(s, "(東証1部:", " ") p = InStr(s, ")") s = Mid(s, p + 1, Len(s) - p) s = Replace(s, ")", "") s = Replace(s, "取引値", "") s = Replace(s, "1株配当", " ") s = Replace(s, "円", "") s = Trim(s) MsgBox s t = Split(s, " ") t1 = t(0) MsgBox t1 t2 = t(1) MsgBox t2 t3 = Val(t(2)) * 1000 + Val(t(3)) MsgBox t3 t4 = t(5) MsgBox t4 End Sub

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

innerTextってなに? FileSystemObjectのFileオブジェクトにそのようなメソッドやプロパティはありません。 str = a.ReadLine data = Mid(str , InStr(str , "1株配当") + 5, 7) では?

関連するQ&A

  • VBSでMid関数を使ったらエラーが出た(文字列の一部を切り出したい)

    お世話になっております。 VBSでテキスト(文字列)の一部を切り出したいのですが、Visual basicのやり方だとエラーが出てしまいます。 つまり、Mid関数を使ったらエラーが出て、対処がわかりません。 以下に具体的なものを示します。 インターネットホームページの中からテキストを取得して、そのテキストから一部分を切り出したいのです。 例えば切り出したテキストが「赤1、青2、黄3」だとします。色名+数字、色名+数字、色名+数字というテキストです。色名を指定して、その次の数字を切り出したいのです。最終的には切り出した数字をc:\textfile.txtに保存しようとしております。 Dim IE dim price Set IE = WScript.CreateObject("InternetExplorer.Application") IE.Navigate ("http://hoomupeeji") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend Dim fs Set fs = CreateObject("Scripting.FileSystemObject") Set a = fs.CreateTextFile("C:\textfile.txt", True) For Each r In IE.Document.All.tags("TABLE")(3).rows For Each c In r.Cells a.Write (Replace(c.innerText, vbCrLf, ",")) Next Next price = Mid(a, InStr(price, "赤") , 1) a.Write (price) a.Close IE.quit どうぞよろしくお願いいたします。

  • DOS 特定の文字列を含むファイルのみの抽出方法

    C直下に2つのテキストファイル「A.txt」「B.txt」が存在するとします。 Aには「Start」、Bには「Second」という文字列が含まれているとします。 これらのテキストを、BATを使って『テキスト内に特定の文字列が含まれているファイル』のみをDOSプロンプト上に表示する方法をご教示願います。 ■想定するコマンド実行結果 ・Start.BATを実行→DOSプロンプトにて「A.txt」のみが表示する。 ・Second.BATを実行→DOSプロンプトにて「B.txt」のみが表示する。 よろしくお願いします。

  • テキスト内の文字列をファイル名にして保存するバッチ

    テキスト内のデータをファイルとして保存するバッチを作成したいです。テキスト内のデータをフォルダ名として保存する方法は見つけたのですがテキストとして保存する方法がわからずご教示いただけますと助かります。 例)テキストファイル名:File_List.txt -----テキスト内のデータ------- 会社名A 会社名B 会社名C ------------------------------------------ 実現したいこと 下記のようにテキスト内のデータをファイル名としてそれぞれ保存したい。 会社名A.txt 会社名B.txt 会社名C.txt テキスト内のデータをフォルダ名にするバッチは以下でした。 for /f %%a in (%1) do md %%a Windowsサーバにてバッチを利用します。

  • テキストファイルから文字列の表示

    あるテキストファイルを読み込んで、OPEN_"*.*"(_は空白、空白の長さは固定されていない/*はワイルドカード)という形の文字列から *.* だけをテキストボックスに表示させたいのですが、どなたか教えてください。当方、初心者で全然わからずに困っています。 例.ABC.txtの中身 OPEN "BLGCOMON.DAT" AS #1 LEN=32 FIELD #1,1 AS BLG1$,8 AS BLG2$,1 AS BLG3$,20 AS BLGDUM$,2 AS BLGDEV$ OPEN  "ABCDEF.TXT" AS #1 LEN=32 GET #1,1 LSET BLG1$="1" LSET BLG2$="WSKMMKY " MID$(BLGDUM$,1,6)=MID$((STR$(WKRC)),2) MID$(BLGDUM$,7,6)=ISAMDAT$ LSET BLGDUM$ = BLGDUM$   OPEN QWER$ PUT #1,1 CLOSE #1 このテキストファイル(ABC.txt)の場合、1行目の「OPEN "BLGCOMON.DAT"」と3行目の「OPEN  "ABCDEF.TXT"」が質問の文字列に当てはまります。テキストボックスには「BLGCOMON.DAT ABCDEF.TXT」のみが表示されるようにしたいです。

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 検索文字列以外のファイル

    テキストファイルの中身を検索して、その文字列以外のファイル名を取りたいのです。具体的には、 【A.txtの中身】 123 abc 【B.txtの中身】 111 abc 【C.txtの中身】 222 abc このようなテキストファイルの中身を検索して、文字列「123 abc」以外が書かれているファイル名(つまり、B.txt、C.txt)を取得したいのですが、findstrやForなどを駆使すれば、できますでしょうか?

  • VB6.0 特定の文字列の取得方法

    環境:WINDOWS 2000 Visual Basic 6.0 (1)htmlファイルをInbutB関数で読み込み、変数AAAに代入 (2)Instr関数を使用して Instr(htmlが格納された変数,"<td")などと特定の文字位置を検索 (3)mid関数などで特定の文字位置から文字位置を抜き出す  例:mid(AAA,<TD>開始位置A,文字列開始位置B) 上記のようなことをやりたいと考えています。 今回困っていることは<TD>開始タグの文字位置の検索です。 <td valign="top" align="right" width="600"> width="600"のtd開始タグの位置を検索したいと思っています。 ファイルは複数あり、<td と width="600" の間に入っているものも異なり、またシンプルに<td width="600>というパターンも存在します。 こういった場合、どの用に特定の条件を満たした<TD>タグの位置を検索すればよいでしょうか?

  • ファイル内の特定の文字列だけを書き出す

    中身が a a a b b b a … と書かれたファイルがあります。 このファイルの中の文字のうち、aのみを書き出したく、以下のプログラムを作成したのですが、上手く動きません。 何がおかしいか教えていただけないでしょうか。 ちなみにエラーは、 Segmentation fault (core dumped) と出ます。 #include <stdio.h> void main() { int x; float c[2160]; FILE *fp; fp = fopen("test.txt", "r"); if(fp == NULL) { printf("ファイルを開くことが出来ませんでした.¥n"); return; } x = 0; while (feof(fp)==0){ c[x] = getc(fr); if(strcmp(c[x], "a")==0) putchar(c[x]); x++; } fclose(fp); }

  • MS-Accessで文字列の一部を抜き出したい

    MS-Accessで文字列の一部を抜き出したいのですが、テキストデータ(フィールド名はSample)「ABC-123 OKWAVE QUESTION ANSER 4567.txt」の"4567"を抜き出す方法を教えて下さい。MS-Access 2021 です。スペースの部分(Nullではありません。)が一か所だけならば Mid([Sample],InStr([Sample]," ")+1,InStrRev([Sample]," ")-InStr([Sample]," ")-1) でいけるように思うのですが、何か所にもスペースがあって、取得したいのは(.txt)という拡張子とその直前の (スペース)に挟まれた部分だけなのです。どうぞよろしくお願いいたします。

  • テキストファイルより特定の文字を削除する方法

    皆様 御世話になっております。 現状、以下の内容のバッチを実行し、dump1.txtのトークン9以後の値をdump2.txtに反映させています。 -------------------------------------------- FOR /F "TOKENS=9,10*" %%A IN (c:\dump1.txt) DO ECHO %%A %%B %%C > c:\dump2.txt -------------------------------------------- dump1.txtからdump2.txtへ引き継がれる値の中で、「\015\n」の文字列のみ不要なので削除したいのですが、このようなことは可能でしょうか? ※「\015\n」は連続した文字列です。

専門家に質問してみよう