• ベストアンサー

テキストファイルの入出力

ACCESS/VBAで、FileSystemObjectを利用して、A.txtを読み込み、A.txtの先頭の文字列が、"A"のものをB.txtに書き出しするコーディングを教えていただきたいので、お願いいたします。

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

  • ベストアンサー
回答No.4

ここまでに出てきた FileSystemObject 関連の情報を、私が提示した MSDN ライブラリで確認なさりましたか? ファイルから読み込んでいる箇所はたった数行です。 たった数行の中で何が行われているのか。 そこで使われているメソッドやプロパティはどんな機能なのか。 どこで不思議な現象が起きているのか予想し、それが正しい挙動なのか、間違った挙動なのか考える。 他人が書いたコードなら尚のこと調べなきゃダメです。 ReadLine について調べれば答えが書いてあります。 ReadLine では行単位で文字列を読み込むが、最後についている改行コードは省きます。 改行コードは vbCrLf です。 読み込んだ 1行文字列の最後に vbCrLf を付け足してください。

ioq
質問者

お礼

大変ありがとうございました。 付け足して書き込みで、うまくいけました。 これからは,良く調べて確認し、考えてするように致します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

A.txt の先頭行から最終行まで 1行ずつ読み込む処理は下記 MSDN ライブラリのページが参考になります。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsproatendofstream.asp あとちょっと機になた部分。 Dim FSO As FileSystemObject という書き方をしているということは Scripting Runtime を参照設定しているのでしょうから、 Set FSO = CreateObject("Scripting.FileSystemObject") という記述ではなくて Set FSO = New FileSystemObject または Set FSO = New Scripting.FileSystemObject となります。 もしリリース時に Scripting Runtime の参照設定を外してリリースするのであれば、 Dim FSO As FileSystemObject Dim Txt As TextStream Dim txo As TextStream の記述は Dim FSO As Object Dim Txt As Object Dim txo As Object と書き、 Set FSO = CreateObject("Scripting.FileSystemObject") はこのままで大丈夫です。

ioq
質問者

補足

ありがとうございました。 LOOP組み込みましたが、改行コードがとれてしまいます。 どうすればよいでしょうか、宜しくお願いいたします。 参照設定しています。最初のところは、モーグのサンプルコーディングからそのままとってきています。 A.txt A12345 B23456 C34567 A45678 A98765 B.txt A12345A45678A98765 Dim FSO As FileSystemObject 'ファイルシステムオブジェクト Dim Txt As TextStream 'テキストストリームオブジェクト Dim txo As TextStream 'テキストストリームオブジェクト Dim buf As String 'バッファ On Error GoTo RErr: 'オブジェクト作成 Set FSO = CreateObject("Scripting.FileSystemObject") Set Txt = FSO.OpenTextFile("C:\TEMP\A.txt", ForReading) Set txo = FSO.CreateTextFile("C:\TEMP\B.txt", True) '読み込み Do While Txt.AtEndOfStream <> True buf = Txt.ReadLine '書込み If Mid(buf, 1, 1) = "A" Then txo.Write buf End If Loop '終了処理 Func_exit: Set Txt = Nothing Set txo = Nothing Set FSO = Nothing Exit Function RErr: MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description GoTo Func_exit: End Function

全文を見る
すると、全ての回答が全文表示されます。
noname#22222
noname#22222
回答No.2

丸投げは関心しません。 そこで、途中まで・・・。 <A.txt> A:111111 B:222222 A:111111 B:222222 を呼び込んで、A:111111 をMsgBox に順次表示するコードは次の通り。 いずれにしろ、読み込み、書き出しも1行で事足ります。 Private Sub コマンド0_Click()   Dim I     As Integer   Dim N     As Integer   Dim strDatas() As String      strDatas() = FileReadArray("C:\Temp\A.txt")   N = UBound(strDatas())   For I = 0 To N     If Left$(strDatas(I), 1) = "A" Then       MsgBox strDatas(I)     End If   Next I End Sub なお、B.txt に出力するには FileWrite "C:\Temp\A.txt", "A:111111" の1行でOKです。 Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray    Dim fso    As FileSystemObject    Dim fil    As File    Dim txs    As TextStream    Dim strText  As String    Dim strTexts() As String       Set fso = New FileSystemObject    Set fil = fso.GetFile(FileName)    Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)    strText = txs.ReadAll    strTexts = Split(strText, Chr$(13) & Chr$(10)) Exit_FileReadArray:    FileReadArray = strTexts()    Exit Function Err_FileReadArray:    MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ"    strTexts() = Split("")    Resume Exit_FileReadArray End Function Public Function FileWrite(ByVal FileName As String, _              ByVal Text As String) As Boolean On Error GoTo Err_FileWrite   Dim fso As FileSystemObject   Dim txs As TextStream      Set fso = New FileSystemObject   Set txs = fso.CreateTextFile(FileName, True)   txs.Write Text   FileWrite = True Exit_FileWrite:   Exit Function Err_FileWrite:   MsgBox Err.Description & "(FileWrite)", vbExclamation, " 関数エラーメッセージ"   Resume Exit_FileWrite End Function

ioq
質問者

補足

ありがとうございます。 他の文献も参考に 下記作成したのですが、リードループの作成方法が解りませんので教えていただけますか。 Dim FSO As FileSystemObject 'ファイルシステムオブジェクト Dim Txt As TextStream 'テキストストリームオブジェクト Dim txo As TextStream 'テキストストリームオブジェクト Dim buf As String 'バッファ On Error GoTo RErr: 'オブジェクト作成 Set FSO = CreateObject("Scripting.FileSystemObject") Set Txt = FSO.OpenTextFile("C:\TEMP\A.txt", ForReading) Set txo = FSO.CreateTextFile("C:\TEMP\B.txt", True) '読み込み buf = Txt.ReadLine '書込み If Mid(buf, 1, 1) = "A" Then txo.Write buf End If '終了処理 Func_exit: Set Txt = Nothing Set txo = Nothing Set FSO = Nothing Exit Function RErr: MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description GoTo Func_exit: End Function

全文を見る
すると、全ての回答が全文表示されます。
  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  下記サイトを参考にしてください。 では。

参考URL:
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGnrlHowToAttachExternalText.html
ioq
質問者

お礼

ありがとうございます。 参考分は、readallの記述ですので、1件づつ読み込んで、条件確認し、必要分の書出しが必要ですので、ごめんなさい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイル操作について、テキストファイルの書き換え

    よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 111 222 333 444 テキストファイルB[B.txt] 文字列1="123" 文字列2="234" 文字列3="345" 文字列4="456" というような二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 使用する言語としてはスクリプト言語であるperl、もしくはプログラム作成経験があるCを使用しようと思っています。(perlは未経験で入門書を読んでいるレベル)

    • ベストアンサー
    • Perl
  • テキストファイルの編集

    以前にもperlでのプログラミングについて質問させて頂いた者です。 前回と被る所があるのですがちょっと複雑で、私の手に負えないので質問させて頂きます。 よろしくお願いします。 データファイルAからデータを取得して、テキストファイルBの内容の一部を取得したデータで書き換えるという操作を行うプログラムを作りたいです。 具体的には、 データファイルA[A.txt]の中身 100 111  200 222 300 333 400 444 テキストファイルB[B.txt] 1st step 文字列1 start="123" end="134" 2nd step 文字列2 start="234" end="245" 3rd step 文字列3 start="345" end="356" 4th step 文字列4 start="456" end="467" という二つのファイルを読み込み、B.txtの""で囲まれた部分を、A.txtで取得したデータで置き換えるような操作を行いたいのですが・・。 A.txtの一行目で取得したデータをB.txtの1stステップの始まりと終わりの値として置き換え、それを二行目は2ndと同様の操作を行うようなプログラムを作りたいです。 もともとこのような操作を行いたくて前回のような質問をし、それを参考にし今日まで考えましたがやはり難しく、また頼りたいと思います。。 どうかよろしくお願いします。

    • ベストアンサー
    • Perl
  • Excelで複数のテキストファイルを1枚のシートに

    Excelで複数のテキストファイルを1枚のシートに追加したいのですが可能でしょうか? VBAや別ソフトを複数使ってもかまいません。 2列のテキストファイルが複数ありA列目は共通でB列目がそれぞれ異なります。 data01.txt、data02.txt…と50ぐらいのファイルがあり、それぞれ A  B 10 1.24 20 2.56 30 2.46 :  : となっています。これをひとまとめにして A      B     C ・・・ data01  data02   data03・・・ data50 10     1.24    1.35 ・・・ 2.24 20     2.56    2.22 ・・・ 1.34 30     2.46    3.23 ・・・ 5.45 :       :      : といった表にしたいのです。 お願いします。

  • テキストファイルの一部置換したファイルをたくさん作りたい

    テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。

  • テキストファイルから改行コードを削除して読込む方法

    ExcelエクセルVBAマクロについてテキストファイルから改行コードを取り除いて 変数に読み込む方法について確認させてください。 下記のVBAログラムはWordファイルをテキストファイルに落としたファイルを変数aに 読み込んでいます。 このとき、読み込んだテキストファイルはWordファイルをテキストファイルに 落とし込んだファイルなので改行コードが残ってしまいます。 この改行コードを削除したうえで変数aに読み込みたいのですが可能でしょうか。 改行コードはメモ帳では「↓」と下矢印に似た文字で表示されます。 (実際には下矢印ではないようです。) 今のところ、Replace関数で改行コードを削除するプログラムを 考えているのですが、改行コードのVBAでの表現方法が分からないので 先に進むことが出来ません。いい案があればぜひご教授下さい。 あるいはほかの方法でも改行コードが削除出来れば結構です。 またこの変数aに読み込んである文字列からかぎカッコの内部にある文字を 抽出してエクセルの行方向に出力する方法があればご教授頂ければ幸いです。 例えば “あなたは「こんにちは」と言いました。 私は「元気ですか」と聞きました。” が文字列aに読み込んである場合、“こんにちは”、“元気ですか”を抽出して エクセルに順に出力という方法です。 色々と書きましたが、よろしくお願いいたします。 以下、VBAプログラム本文です。 ---------------------------------- Sub sample1() Dim a As String a = CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Readall CreateObject("Scripting.FileSystemObject").GetFile("C:\sample.txt").OpenAsTextStream.Close End Sub

  • C#でテキストファイルの更新がしたい

    C#でテキストファイルを読込み、特定の文字を置換して上書きしたいです。 StreamReaderで読み込んで、変数に退避し、StreamWriterで書くのは出来ると思いますが もっと簡単に、読み込んでRewriteのようなコーディングって出来ないのでしょうか? A.Txt あああ いいい ううう ↓ 【あああ】を【えええ】にしてA.Txtを上書き A.Txt えええ いいい ううう 何かいい方法があれば教えてください。 よろしくお願いいたします。

  • テキスト比較について

    テキストファイルを比較して抽出したいのですが、 どのようなソフトがいいのかわかりません。 私がしたいことは a.txt (検索) aac = bcf = cag = dai = b.txt (ベース) aaa = 123456789 aac = 234567891 bbf = 345678912 bcf = 456789123 cae = 567891234 cag = 678912345 dae = 789123456 dai = 891234567 efg = 912345678 このような二つのテキストがあったら b.txtからa.txtの文字列を検索してc.txtに抽出するようにしたいのです。 なので、文字列を抽出したc.txtは以下のようになっているはずです。 c.txt aac = 234567891 bcf = 456789123 cag = 678912345 dai = 891234567 こんな感じです。 必要な文字列を一括で抽出するソフトはありますでしょうか? ちなみに検索文字列は300弱あります。 当方 windows 7 64bitでwordとexcelは入っております。 もし、良いソフトがありましたら教えてください。 また、excelやwordのマクロでできるなら、優しく教えてください。 当方excelは初心者なもので… よろしくお願いします。

  • 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部”の位置検出、文字切り出しをまず解決したいと思っております。 どうぞよろしくお願いいたします。

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

    皆様 御世話になっております。 現状、以下の内容のバッチを実行し、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」は連続した文字列です。

  • Excel VBAで列ごとのデータをテキストファイルへ書くには?

    エクセルのシート(たとえばSheet1)が以下のようになっているとします。 A B C D E F 1 商品A 11111111 あいうえお 3 1000 2 商品B 22222222 かくくけこ 1 2500 3 商品C 33333333 さしすせそ 2 3500 ・ ・ これを決まった列ごとにテキストファイル(固定ファイル名)に書き出すということは、エクセルのVBAで可能でしょうか? テキストファイルの内容は以下のようにしたいのです。 E列を数量として、その分だけのテキスト行を書き出したいのですが… <<bbb.txt>> 商品A 商品A 商品A 商品B 商品C 商品C ・ ・ <<ccc.txt>> 11111111 11111111 11111111 22222222 33333333 33333333 ・ ・ <<fff.txt>> 1000 1000 1000 2500 3500 3500 ・ ・ また、このようなことが参考になるHPがあればお教え願いたいのですが。 以上よろしくお願いします。