• ベストアンサー

ファイルの作成方法…

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/17068)
回答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
質問者

お礼

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

関連するQ&A

  • ファイルの作成と書き込み

    今始めてPerlを書いているのですがつまづいている部分があります。 変数に記録されたデータをテキストファイルとして出力する部分なのですが保存するテキストファイルを上書きしないようにしてほしいのです。 私が希望する流れを簡単に説明すると・・・。 変数「$txt」にデータを記録。 ↓ フォルダー「log」に移動。(開く。) ↓ ファイル「1.txt」の存在を確認。 ↓ (存在しなければ) 「1.txt」を作成。中身は「$txt」 ↓ (存在すれば) 「2.txt」の存在を確認。 ・ ・ ・ これを10回ループ ・ 「12.txt」の存在を確認。 (存在しなければ) 「12.txt」を作成。中身は「$txt」。 (存在したら) 「1.txt」を「$txt」で上書き 説明下手なのですがどなたかわかるかたソースを教えていただけませんか?

    • ベストアンサー
    • Perl
  • ファイル結合

    現在、テキストファイルの結合で困っています。 test1.txt test2.txt・・・・・・test*.txtのファイルがあり それぞれのファイルには縦に1列、数値が500個入っています。 test1.txtの中身(例) 0.3 0.5 0.8 0.6 0.2 0.8 それを以下のように結合したいのですがうまくいきません 0.3 0.8 0.2・・・・・・ 1.9 0.5 0.8 0.7・・・・・・ 0.1 0.8  ・ 0.6  ・ 0.2  ・ 0.8 0.5 0.4・・・・・・ 0.7 参考書のプログラムを参考に作ってみたのですが途中でずれてしまうのです そのプログラムを載せるべきかもしれませんが、大部分が参考書のままなので今のところ載せてません こんな状態では難しいとは思われるのですが、どうかアドバイスをお願いします。

  • ファイル名一括変換ソフト

    ■[フォルダ0]の中 [保存1] >[フォルダ1] > [テスト] > Text.txt [保存1] >[フォルダ2] > [テスト] > Text.txt [保存1] >[フォルダ3] > [テスト] > Text.txt [保存1] >[フォルダ4] > [テスト] > Text.txt ">"は下位のフォルダです。 こういうフォルダ階層がありファイルがあったときに 一括で各Text.txtの名前を たとえば [保存1] >[フォルダ1] > [テスト] > Text.txt だったら、 "Text.txt" から "フォルダ1.txt"にしたいのです。 数階層上のフォルダ名を指定し、ファイル名にリネームしたいのですが、なにかよいフリーソフトはないでしょうか。 まとめると、 Windowsの検索機能後、ドラッグ&ドロップ、もしくはソフトの検索機能で変更したいファイル名を指定し、好きなフォルダ名を指定してファイル名に付加できるものがないかと思っています。 いままでリネームソフトにはNamery というソフトを使用してきたのですができませんでした。 どなたか、ご存知のソフトがありましたら、教えていただけると助かります。よろしくお願いいたします。

  • viエディタでの新規ファイル作成について

    /txt/bataa 以下のフォルダに三つのテキストファイルがあります bataa1.txt bataa2.txt bataa3.txt ---------------------------- bataa4.txtを新規作成するために vi bataa4.txtを実行して内容を編集しました。 途中で内容に大幅な誤りが見つかったので ファイルを作成、保存せずにviを終了する事にしました。 この際 q! で終了すればbataa4.txtは作成されないという認識で 間違いないでしょうか? もう少し追記します。 cd /txt/bataa  ←(bataa1.txt、bataa2.txt、bataa3.txtがある) vi bataa4.txt  ←(bataa4.txt) ------viで内容編集------ :q! これでマシン上のどこにもbataa4.txtは作成、保存されてないでしょうか?

  • バッチファイルで複数のテキストファイルの置換

    バッチファイルで以下のような処理を行うことはできないでしょうか? フォルダ1以下の全てのテキストファイル内の abcde という文字列を あいうえお に置換して、上書き保存ではなく 元のファイル名+(編集済み).txt というファイル名で同じ場所に保存できないでしょうか。 バッチファイルで出来ない場合他の物でも構いません。 ――――――――――――――――――――――――――――― 処理前 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │   ├フォルダ3   │  └フォルダ4   │     └ファイル2.txt (内容:abcde123abcde123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― ↓ ――――――――――――――――――――――――――――― 処理後 フォルダ1   │   ├フォルダ2   │  └ファイル1.txt (内容:123abcde)   │  └ファイル1(編集済).txt (内容:123あいうえお)   │   ├フォルダ3   │  └フォルダ4   │     ├ファイル2.txt (内容:abcde123abcde123)   │     └ファイル2(編集済).txt (内容:あいうえお123あいうえお123)   │   └フォルダ5      └ファイル3.txt (内容:456fghij) ――――――――――――――――――――――――――――― こんな感じで出来ないでしょうか。 よろしくお願いします。

  • テキストファイルの読み込みとリストボックスへの反映

    VB初心者です。VB2008を使用しています。 2のリストボックス(listbox1,listbox2)があり、 listbox1には("1","2")、listbox2には("A","B")という値がはいっています。 このデータをテキストファイル(test.txt)に次のように保存します [listbox1] 1 2 [listbox2] A B ここまでは出来ました。 そこで質問です。 保存したこれらの値をそれぞれのリストボックスに読み込ませたいのですが、 どのようにすればよいでしょうか。 実行ファイルとテキストファイルは同じフォルダ(c:\testprogram)に入っています。 うまく伝えられませんがよろしくお願い致します。

  • バッチファイルでのファイル一覧取得

    初心者です。初めてバッチファイルを作成しようと考えていますが、作成方法がわかりません。 環境はWindwsです。 C:\BディレクトリにAというフォルダがありその中に複数のテキストファイルが保存されています。 そのファイルの一覧をBディレクトリ直下のfile_name.txtへ書き込みたいのですが、dirコマンドでファイルの一覧が取得できるのはわかったのですが、ディレクトリ移動してファイルを書き込む方法がわからず困っています。 更にAフォルダには毎日違うテキストファイルが保存されるため、次回バッチを起動した際にはfile_name.txtの中身をクリアして新規に書き込みをしたいと考えています。 初心者で質問内容に不備があるかもしれませんが、ご教授お願いします。

  • ファイルの作成からその使用に際して

    VB2008Expressでプログラミング中です。 早速ですが、この度ボタンを押すと3種の.txtファイルを作成し、ある文字列をそこに保存する、といったプログラムが必要になったのですが不具合がでて困っています。 sub createfile() IO.file.create("d:\1.txt") IO.file.create("d:\2.txt") IO.file.create("d:\3.txt") end sub private sub button_click()handles button1.click call createfile() Dim Writer As New IO.StreamWriter("d:\1.txt") Writer.WriteLine(Richtextbox1.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\2.txt") Writer.WriteLine(Richtextbox2.Text) Writer.Close() Dim Writer As New IO.StreamWriter("d:\3.txt") Writer.WriteLine(Richtextbox3.Text) Writer.Close() end sub といった感じでファイルを作成したらそこにテキストを保存するようにしたいのですが、「ファイルが使用中でアクセスできません」とエラーになります。 いろんなサイトで勉強してみたのですが、いまいち理由がわかりません。どなたか教えていただける方はいませんでしょうか?

  • WordでTXTファイルが「ファイル名付きで」開けません。

    Wordによる、TXTファイルの編集・上書きがうまくできません。関連付けは、してあるので、エクスプローラで表示されたTXTファイルのアイコンをクリックすると、Wordが開いて、ファイル内容が正しく表示されます。 ところが、Wordの最上段にファイル名が表示されません(常に「文書1」のように表示されます)。そのため、編集後「上書き保存」ができません(所在フォルダを探せば保存できますが、非常に面倒です)。 同じXPとWord2000の組合せは10年近く使っており、編集後「上書き保存」が容易にできました(最上段にはファイル名が表示されていました)。ところがOSの再インストールをしてから、このように不便になってしまいました。 よろしくお願いします。

  • 特定のサブフォルダのテキストファイルだけをリネイムするバッチファイル

    特定のサブフォルダのテキストファイルだけをリネイムするバッチファイル 以下のような階層構造でファイルを保存していますが、2回目フォルダのテキストファイルのみを リネイムするバッチファイルは作成可能でしょうか? 仕事で必要なのですが、プログラム的なことはさっぱりわからないので困っております。 ご存じの方がいらっしゃいましたら、何とぞよろしくお願いいたします。 ・構造 以下の2パターン  1.親フォルダ-月フォルダー日フォルダーテキストファイル  2.親フォルダ-月フォルダー日フォルダーn回目フォルダーテキストファイル 例)1.の場合 D:\parent\1月\9日\20100109goo.txt 2.の場合 D:\parent\1月\9日\2回目\20100109goo.txt パターン1、2、ともに親フォルダ内に複数あり バッチファイルの結果:2回目フォルダのテキストファイルのみ            goo.txt→20100109goo.second.txtにしたい