• ベストアンサー

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/17069)
回答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

専門家に質問してみよう