• ベストアンサー

ファイルの作成方法…

VBでテキストファイルの中身を開くプログラムを作成しました。 そのテキストファイルの中身を変更(編集)し、それを同じファイルに上書き保存するのではなく、開いたファイルのある同じフォルダ内に新しいファイルを作り保存したいと思っています。  <例>test1.txtというファイルを開き中身を編集してそれを同じフォルダ内に新しくtest2.txtというファイルを作って保存するといった感じです。 そこで新しいファイル名で保存する(新しいファイルを作成する)方法を教えて欲しいんです、こんな説明で分かってもらえるか不安ですが…、どなたか分かる方教えていただけませんでしょうか? かなりの初心者なのですが、私でも理解できるようなプログラムだと嬉しいです。 よろしくお願いします。

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

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

簡単にテキストデータを読み込んで書き込むといった感じの プログラムを書いてみました。 dim strdata as string '文字列データ dim temp as string '読込一時文字列保存用データ '//text1.txt読込み open app.path & "\text1.txt" for Input as #1 Do UNTIL EOF(1) line input #1,temp strdata=strdata & temp & vbcrlf loop close #1 '//strdataを編集 '//text2.txt書き込み open app.path & "\text2.txt" for output as #1 print #1,strdata close #1 基本的な部分も含めて説明しておきます。 app.pathとはアプリケーションを実行しているフォルダの位置を表します。 vbcrlfは改行を意味します。 DO UNTIL EOF(1) ~ loopは そのファイルが終端になるまで読み込むという意味です。 書き込む方はテキストデータをそのまま指定するだけでokです。 参考にして頂ければ幸いです。

ryuji0202
質問者

お礼

関数の説明もしていただくなど、細かい心配り本当にありがとうございました。 お礼が遅くなってしまいましたが本当によい参考になりました!

その他の回答 (3)

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

参考になればと思って送ります。 メモ帳で作ったファイルを読む方法の例 aには、"大阪","名古屋","東京"という風に入ります。 フィールドの切りだしが面倒です。「,」を探し求めて分割できます。 Sub test01() Open "coment.txt" For Input As #1 While Not EOF(1) Line Input #1, a MsgBox a s = 1 p = InStrB(s, a, ",") MsgBox MidB(a, 1, p - 1 - 1) s = p + 1 p = InStrB(s, a, ",") MsgBox MidB(a, s + 1, p - s - 1) Wend Close #1 End Sub ----フィールドごとに読む方法 フィールドの数は1レコード毎に数は一定しているはずなので、何番目かを頼りに、目指すフィールドを探します。 Sub test02() Open "coment.txt" For Input As #1 While Not EOF(1) Input #1, a MsgBox a Wend Close #1 End Sub ------書き出す方法 一部のフィールドを書きかえるには、書き換えたストリングを作り、末尾にvbCrLfを添えてprintで書き出します。 Mid関数や&を使うことになるでしょう。 Sub test03() Open "c:\My Documents\abc.txt" For Output As #2 a = "大阪" b = "名古屋" c = "東京" x = a & "," & b & "," & c & vbCrLf MsgBox x Print #2, x Close #2 End Sub 他に念のため、Input#関数、PUTステートメント も調べてみてください。

ryuji0202
質問者

お礼

お礼が遅くなってすみません…。 とても分かりやすく説明していただき本当にありがとうございました。 Input#関数、PUTステートメントも調べてみますね!

  • Vargas
  • ベストアンサー率45% (9/20)
回答No.3

「VBでテキストファイルの中身を開くプログラムを作成しました。 」という一文から、既に読み込みは出来ていると思います。その読み込み先が、テキストボックス(マルチライン)であると想定して。。。。 まずフォーム上に用意するコントロール ・テキストボックス(マルチライン):text1  これは既にあると思います。 ・コマンドボタン(ファイル保存用):command1 ・コモンダイアログ:commondialog1  ツールボックス内に存在しない様であれば、  ツールボックス内で右クリックして、  コンポーネント選択後、"Microsoft Common Dialog~" を選択して下さい。  フォーム上に貼り付けたならば、CancelErrorプロパティ をTrueにしておいてください。 すると以下のコーディングを コマンドボタンのクリックイベントに書く事で 出来ます。 Private Sub Command1_Click() On Error GoTo aaa CommonDialog1.ShowSave Open CommonDialog1.FileName For Binary As #1 Put #1, , Text1.Text Close #1 Exit Sub aaa: If Err.Number = 32755 Then MsgBox "キャンセル" End If End Sub #1,#2さんとの違いはコモンダイアログを使用する事でディレクトリーの出力先を選択出来る事と、行単位の出力ではなく、一括でファイル出力可能な事です。 on error~という行と aaa:という行はエラー出口を設定するためのもので、あまり、今回の趣旨とは関係ありませんが、コモンダイアログでキャンセルをされた場合の対処を行っているだけです。 コモンダイアログを開く時に、最初に表示される ディレクトリーを指定しておきたいのであれば、 CommonDialog1.ShowSaveの前に CommonDialog1.InitDir = ~ を設定しておけば良いと思います。

ryuji0202
質問者

お礼

お礼が遅くなってすみません…。 Vargasさんの”読み込み先が、テキストボックス(マルチライン)であると想定して。。。。 ”はどんぴしゃでした(^^) とてもよい参考になりました! 本当に丁寧に教えていただいてありがとうございました。

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

open ファイル名 For Output As ファイルナンバー とOutputモードでオープンするとファイルが存在しない場合に新規作成を試みます。 Append、Binary、Randomでも同様です。 これを利用して、新規作成→書き込み→保存を行います。

ryuji0202
質問者

お礼

お礼が遅くなってしまいましたが回答ありがとうございました! さっそく参考にしたいと思います。