• ベストアンサー

VB6にて、テキストファイルの内容を更新したいのですが。。

こんにちは、またも壁にぶつかりましたので教えて下さい<(_ _)>テキストファイルの中身を変更したいのですが、エラーばかりです(>_<)読み書きができるOpenの仕方ってあるのでしょうか?開いて、読み込んでって、Aをみつけたら;Aって感じで変更したいんですが、どうもできません(>_<)教えていただきたいです<(_ _)>よろしくお願いします<(_ _)>

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

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

喜んでいただけて嬉しいのですが、小言を少し・・・ 「意味不明です」なのであれば、私が張ったソースは使わない方がいいです。 何処ででもそうなのですが、教えてもらったソースや、情報が理解できないのであれば、理解するように努力して、理解できてから使うようにした方がいいです。 やろうと思えば、システムを壊す事も可能だということを頭の片隅にでも置いておいて欲しいです。 これからも何か開発をしようと思うなら大切な事だと思います。 で、理解してもらう為に以下のキーワードをヘルプなりで調べて理解してください。 そうすれば、自ずとsatoshi777さんのやりたいことのソースが出来上がって来ると思います。 ===キーワード=== Open FreeFile Line Input Replace Print Scripting.FileSystemObject ================ 小うるさい事を言ってすいません。 頑張ってください。

satoshi777
質問者

お礼

おはようございます。冷静になって、一つずつデバックで見ていって、一行ずつ説明書いていって、調べていったら少しずつわかってきました。僕なりにアレンジもして、いくつかの変更にも成功しました<(_ _)>小うるさい事とは思ってません、ありがたい助言として感謝しています<(_ _)>また何かあったら教えてください<(_ _)>

その他の回答 (7)

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

エラーが出るとか、できません言う前に シーケンシャルファイルは、変更は、たとえ同じ文字数で置き換える場合でも、文字数が増えるならなおさら、別のファイルを1から(同じとこ(変更ないレコード)もコピーして作成)作るんだということを勉強すべきなんです。 各レコードが同じ長さで、項目構成や項目データ長が同じ固定長の場合は書き換えるというモードがあります。 以上がわれわれに許された方法ですが、プロになれば、ディスクを自分で自由に書ける(フィジカルにRead,Write)ようですが、質問者には 無縁の世界です。 回答の1-4はDOSBasic時代からあるステートメントが中心で使われており、そのころの方が上記のようなことを勉強する機会が多かったが 今は便利なところから入っちゃうので、かえって難しい。

satoshi777
質問者

お礼

おはようございます。おっしゃるとおりです<(_ _)>まずいろんなルールを理解して基礎をしっかり勉強したいと思います<(_ _)>助言ありがとうございます<(_ _)>

回答No.6

#5です 定数切り忘れ ForReading = 1 ForWriting = 2 です。

回答No.5

ファイルサイズにもよるかもしれませんが、それほどサイズが大きくないキストファイルなら、 ・全部読む ・内容を編集する ・編集内容で上書きする という方法が簡単だと思います。 Replace関数で、全行を置換をするのであれば、一行単位で編集を行うより効率的です。 Sub Test()   Dim strWk  As String   'ファイル読み   Call FileRead("C:\test.txt", strWk)      '-----------------------------   '編集 "A" → ";A"   strWk = Replace(strWk, "A", ";A")   '行単位で編集を行いたいのであれば、Split(strWk,vbCrLf)として行分割   'Split関数は履歴で調べましょう   '-----------------------------      'ファイル書き   Call FileWrite("C:\test.txt", strWk)    End Sub 'ファイル読み Private Sub FileRead(ByVal p_ファイル名 As String, ByRef p_内容 As String)   Dim objTst As Object  'TextStream   Dim strWk  As String      Set objTst = CreateObject("Scripting.FileSystemObject").OpenTextFile(p_ファイル名, ForReading)   p_内容 = objTst.ReadAll   objTst.Close   Set objTst = Nothing End Sub 'ファイル書き Private Sub FileWrite(ByVal p_ファイル名 As String, ByVal p_内容 As String, Optional p_上書き As Boolean = True)   Dim objTst As Object  'TextStream      Set objTst = CreateObject("Scripting.FileSystemObject").OpenTextFile(p_ファイル名, ForWriting, p_上書き)   objTst.Write p_内容   objTst.Close   Set objTst = Nothing End Sub

satoshi777
質問者

お礼

おはようございます。お久しぶりです。またまた助けられました<(_ _)>一行ずつ調べていって、やっと何をしてるのかわかりました。テキストファイルの内容を全て読み込んで、変更したい文字を変えてるんですね。次はSplit関数で行の方もやってみます。ありがとうございました<(_ _)>

回答No.4

ソース考えてみました。 こんな感じで、できるんじゃないかと。 但し、このソース実行してないので、動くか解りません。 また、読み込んだファイルが消えるはずなので、そこはBackUp取るなりしてもいいんじゃないかと。 あと、参照設定に「Microsoft Scripting Runtime」が必要かも。 ご使用は自己責任ということで・・・ ================================= Private Sub Command1_Click() Dim FileNo_R As Integer Dim FileNo_W As Integer Dim F_NM_W As String Dim F_NM_R As String Dim TextLine_R As String Dim Textline_w As String Dim Fso As New Scripting.FileSystemObject F_NM_R = "D:\test_r.txt" F_NM_W = "D:\test_w.txt" FileNo_R = FreeFile Open F_NM_R For Input Access Read Lock Write As #FileNo_R FileNo_W = FreeFile Open F_NM_W For Output Access Write Lock Write As #FileNo_W Do While Not EOF(FileNo_R) Line Input #FileNo_R, TextLine_R Textline_w = Replace(TextLine_R, "A", ";A") Print #FileNo_W, Textline_w Loop Close #FileNo_R Close #FileNo_W Fso.DeleteFile F_NM_R Fso.MoveFile F_NM_W, F_NM_R End Sub =================================

satoshi777
質問者

補足

すごいです(>_<)ビックリです!意味不明です(>_<)しかし、完璧です!!ファイルも勝手に作られてたし、すごいの一言です!!!もう少し教えてください<(_ _)>このAを;Aに変更するのと同じなので、B、C、Dぐらいまであります。その場合は一体どうすればよいでしょうか?自分でやりたいのは山々なのですが、まったくわからないというのが現状の実力です。もしよろしければ考えてやってください<(_ _)>よろしくお願いします<(_ _)>

  • m2m10
  • ベストアンサー率0% (0/11)
回答No.3

私だったら、固定長を考えます。 そのまま、ファイルのポインター位置で  GET #1, ポインター位置, aDt PUT #1, ポインター位置 , aDt が可能です

satoshi777
質問者

補足

ごめんなさい。素人すぎて、これだけでは何のことやら・・・(>_<)理解できるようになるまで頑張ります。考えてくださって、ありがとうございます<(_ _)>

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.2

Open中に書き換える場合は、 Open "C:\HOGE.txt" For Random As #intFF で、Get,Putで読み出し、書き込みができます。 ですが、これをやる場合は文字数が書き換えの前後で 替わってはいけません。 文字数が替わる場合は、元のファイルに直接更新するのではなく、 読んだ分を別ファイルに書き出すか、 件数がそれほど多くないなら配列に一旦格納して、最後に一旦閉じてからOutputで開き直して全件出力させます。

satoshi777
質問者

補足

文字数が増えるのでダメですね(>_<)全部読み込んで、変更して、書き込むってのが僕的には一番わかりやすいです。変更箇所が4箇所もあるので、パニックです(>_<)えぇっと、Do while not で全部読み込んで、変数で変更していって、読み込みが終わったら、次にまたファイルをOutputでOpenして、さっき読み込んだのを書き込むんですよね?手順はあってますでしょうか?なんて難しいんだぁ(>_<)

  • Caryo_t
  • ベストアンサー率45% (112/246)
回答No.1

ご存知かもしれませんが,エラーの内容が不明なので,基本的なことだけ。 読み込むときのOpenの仕方はInput,書き込むときはOutputです。 まずInput形式でOpenした後,Aを探して,見つけたらA;に変換します。 次に,開いているファイルを閉じます。 最後にOutput形式でOpenして書きこみます。 お役に立てれば幸いです。

satoshi777
質問者

補足

ありがとうございます。まず読み込んで、次に書き込むんですね!!やってみます。順序は、読み込みながら、変数を変更しながらってのでよろしいんでしょうか?mytext = "A" mytext=";A"って感じで変更しながらでしょうか?哀しくなるくらいの素人で申し訳ありませぬ<(_ _)>

関連するQ&A