VB6.0特定位置書き換え

このQ&Aのポイント
  • VB6.0で特定の行からCSVを削除、書き込む方法について教えてください。
  • SkipLineを使用して特定の行を指定するとエラーが発生し、ファイルモードが不正ですと表示されます。
  • OpenTextFileの第二、第三引数はファイルのモードを切り替えるための引数です。具体的な使い方を教えてください。
回答を見る
  • ベストアンサー

VB6.0 特定の位置からの書き換え

VB6.0でCSVを特定の行から削除、書き込みしたいと思っています。 Dim objFso, objTxtSt As Object Set objFso = CreateObject("Scripting.FileSystemObject") Set objTxtSt = objFso.OpenTextFile(strPass, 8, -1) Dim i As Integer For i = 1 To 2 Step 1 objTxtSt.SkipLine Next Call objTxtSt.WriteLine(strpData) objTxtSt.Close Set objTxtSt = Nothing Set objFso = Nothing しかしSkipLineが読込み時専用らしく書き込み時、削除時行を指定する方法がわかりません。 エラーNo.54:「ファイルモードが不正です」 またOpenTextFileの第二、第三引数の意味がわかりません(Read、Writeモードの切り替えかと考えています)ので、教えていただけますでしょうか。

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

  • ベストアンサー
  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.2

No2.です FileSystemObjectでは、連続したファイルの内容を途中から変更等は難しいと思います。 FileSystemObjectを利用するのであれば、 1.読込み側のファイルをオープンする 2.適当な名前のファイルを書き込みモードでオープンする。 3.読み込み側、1行読み込む 4.書き込み側、読み込んだ行を修正し(?)書込み 3.4.繰り返し 5.両方のファイルを閉じる 6.読み込み側ファイル削除 7.書き込み側ファイル名前変更(読み込み側ファイル名に変更) Openメソッドを利用したCSVのアクセス方法は下記URLを参照してみて下さい

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc440858.aspx
ShimantoGa
質問者

お礼

回答ありがとうございます。 提示いただいたやり方の場合 1.一度元となるCSVを全て読込み 2.元となるCSV削除 3.読込んだデータを修正 4.同名のCSVを新規作成 5.修正したデータを書込み 現在以上のようにしているのですが、これとほぼ手間が変わらないように思います。 >FileSystemObjectでは、連続したファイルの内容を途中から変更等は難しいと思います。 参考サイトより、Openメソッドについて調べてみました。 しかしここにあるものもFileSystemObjectと同様に、ファイルの行数を指定しての読込みは不可能のように思います。 間違っていたら申し訳ありません。

その他の回答 (3)

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.4

個本的にその様な処理で良いかと思います。 直接ファイルを操作する場合は、万が一の事も考慮して処理の流れを検討する事が一番重要と思います。 今後は、そのことを念頭に置いてプログラムの作成を進めて頂ければ結構だと思います。

ShimantoGa
質問者

お礼

ご指摘ありがとうございました。 >今後は、そのことを念頭に置いてプログラムの作成を進めて頂ければ結構だと思います。 ご教授していただいた内容を吟味し、今後に生かしていこうと思います。

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.3

なぜ一度、作業ファイルを書き出しているかというと、途中での不慮の事故・障害に対応する為です。 ※元のファイルを削除直後にアプリケーションエラー等が発生した場合、プログラム内のキャッシュも全て消えてしまいます。 ファイル書き込み中であれば、ファイル復活ソフトでも復旧出来なくなる可能性があります。 手間はかかりますが、この方法はかなり有効です。

ShimantoGa
質問者

お礼

おお、確かにそうですね。 そうなると私の場合は 1.読込CSVを全て読込み 2.読込CSVファイル名を変更 3.読込んだデータを修正 4.読込CSVと同名の書込CSVを新規作成 5.修正したデータを書込み 5.5.ここまででエラーが発生した場合 →書込CSV削除 →読込CSVファイル名を戻す 6.読込CSV削除 こんな感じでよろしいでしょうか。

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

>Set objTxtSt = objFso.OpenTextFile(strPass, 8, -1) 2番目の引数は追記(ForAppending)モードなので削除等は出来ないのでは。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc428044.aspx
ShimantoGa
質問者

お礼

回答ありがとうございます。 OpenTextFileの引数に関しては、参考サイトより理解できました。 有難うございます。 Set objTxtSt = objFso.OpenTextFile(strPass, 2, -1) とし、再度実行したところ同様のエラーが発生しました。 どのようにすればよいでしょうか。

関連するQ&A

  • VB6.0 CreateObject以外のファイルI/O

    以前CreateObject("Scripting.FileSystemObject")を使用してファイルを読込む方法、一行ずつ書込む方法を教えていただいたのですが。 環境によってはウイルスチェックに引っかかってしまうようで、別な手段を取らなければならなくなりました。 読込み: Set objFso = CreateObject("Scripting.FileSystemObject") Set objTxtSt = objFso.OpenTextFile(strFilePass, 1) strData = CStr(objTxtSt.ReadAll()) 書込み: Set objFso = CreateObject("Scripting.FileSystemObject") Set objTxtSt = objFso.OpenTextFile(strFilePass, 2, False) Call objTxtSt.WriteLine(strData) 現在の処理は以上です。 上記と同じ処理をCreateObjectを使用せずに作成するにはどのようにすればよろしいでしょうか。

  • VB6.0にて、CSVファイルを読み込もうとしているのですが、1行ずつ

    VB6.0にて、CSVファイルを読み込もうとしているのですが、1行ずつ読み込めません。 以下のコードで、Lineのメッセージボックスが表示されないのです。 どなたか教えていただけないでしょうか。よろしくお願いします。 'CSVファイル読み込み Sub Stream() Dim Line, Temp As Variant Dim objFSO As Object Dim objStream As Object Const ForReading = 1, ForWriting = 2, ForAppending = 3 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objStream = objFSO.OpenTextFile(strDFpath & strDFname(1), ForReading, False) Temp = objStream.ReadAll MsgBox Temp '最後の行までループ Do Until objStream.AtEndOfLine - 1 <> True '1行読む Line = objStream.ReadLine MsgBox Line Loop objStream.Close Set objStream = Nothing Set objFSO = Nothing End Sub

  • ファイルへの書き込み

    いままでPrintメソッドを使って書き込みしていました。 ちょっと志向を変えてオブジェクト(?)をつかってプログラミングしています。 ファイルの書き込みでつまづいたので教えてください。 真ん中くらいに質問文があります Dim objFileSystem As Object Dim objFile As Object Dim strFileName As String Dim strBuff As String ' 読み込むファイル名 strFileName = "Readme.txt" ' FileSystemObjectオブジェクトへの参照 Set objFileSystem = CreateObject("Scripting.FileSystemObject") ' ファイルを開く Set objFile = objFileSystem.OpenTextFile(strFileName) ' ファイルの最後に達するまでループ strBuff = strBuff + naiyo.Text   'ここで質問。この書き方だとファイルモードが不正とエラーが出ます。   'この部分どう書けばよいのでしょうか? objFile.writeline (strBuff) ' ファイルを閉じる objFile.Close ' オブジェクトを解放 Set objFileSystem = Nothing Set objFile = Nothing オブジェクト変数(というのでしょうか(^^ゞ)を使ったファイルの書き込み方教えてください。

  • CSVファイル

    CSVファイルを1行ずつ比較して読み込み、一致した行を別ファイルに記述していこうと思っています。 現在、csvファイルを読み込む所まで出来ています。 比較して別ファイルに記述する方法を教えて下さい。 もしくはアドバイスください。 【ファイルの中身】 "09/09/2005 0:00:00,aaa,bbb,ccc" 【比較条件】 当日の日付を取得し、年月日だけで比較する Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") Do while objFile.ReadLine <> ""         'IF文を記述(条件:日付)        '別ファイルに記述する Loop objFile.close Set objFileSystem = Nothing Set objFile = Nothing

  • access 日付名でバックアップ

    accessでファイルをコピーして日付の名前をつけて保存したいのですがうまくいきません。 ------------------------------------------------------ Dim objFSO As FileSystemObject Dim str元ファイル As String Dim str新ファイル As String Set objFSO = CreateObject("Scripting.FileSystemObject") str元ファイル = "C:\sample.mdb" str新ファイル = "C:\format(date(),"yymmdd").mdb" objFSO.copyFile str元ファイル, str新ファイル, True Set objFSO = Nothing ------------------------------------------------------- どうも新ファイル名の指定の仕方が悪いようですがどこを直していいかわかりません。 どなたか教えてください。

  • OpenTextFile で書き込みできません。

    dim ObjFSO,ObjTS 'オブジェクトを作成します。 Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject") 'ファイルを開きます。 Set ObjTS = ObjFSO.OpenTextFile(filename,1,false) filenameにはC:\Documents and Settings\○○○\デスクトップ\test.csvが入っています。 サーバーのパスにtest.csvを持っていくと問題なく動作しますが、それ以外デスクトップからだと「書き込みできません。」とエラーメッセージができません。 どうしたらいいでしょうか? よろしくお願い致します。

  • vbsで最後の行を削除する

    csvファイル(test.csv)からフラグが1のものを抽出するのですが 最終行に改行がはってしまうので、最終行を削除してcsvファイルを保存したいのですが、 うまくいきません。ご教授ください。 Dim objADO Dim i Dim wsql Dim rs Dim wHeader Dim wData Dim objFSO Dim objFile Set objADO = CreateObject('ADODb.connection') objADO.Open "Driver={Microsoft Text Driver (*.txt;*csv)};"&_ "DBQ=C:\test;"&_ "ReadOnly=1" '抽出条件 wsql="select * from test.csv where フラグ='1'" Set rs =objADO.Execute(Wsql) 'ヘッダ部 wHeader='ID,商品名,商品番号,フラグ" 'データ部 wData="" Do While rs.EOF=False For i = 0 to rs.fields.count - 1 if i = (rs.fields.count -1) then wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & chr(13) else wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & "," end if next rs.MoveNext loop '最終改行削除? rs = Left(wData,Len(wData) - Len(chr(13))) 'ファイル出力 set objFSO = createObject("Scripting.FileSystemObject") set objFile = objFSO.OpentextFile("c:\test\test.csv",2, true) if err.Number = 0 then objFile.WriteLine(wHeader) objFile.WriteLine(wData) objFile.close end if set objFile = Nothing set objFSO = Nothing set objADO = Nothing ****************************************** ID,商品名,商品番号,フラグ 100,パソコン,100-12,1 200,ペン,200-11,1 ***ここの改行を削除する***** 〔EOF〕

  • VBS

    VBSであるファイルを1行ずつ読み込み、その読み込んだ値を ある別のファイルにリダイレクトしたいのですが、 どのように書けばよいか教えてください。 下記のように、echoでは出すことができるのですが、 ファイルにリダイレクトというのができません。 よろしくお願いします。 ==== sample shell ========================= Option Explicit On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then Set objFile = objFSO.OpenTextFile("d:\dr1.txt") If Err.Number = 0 Then Do While objFile.AtEndOfStream <> True WScript.Echo objFile.ReadLine Loop objFile.Close Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing ============================================================

  • 位置の指定をすることは可能ですか?

    VBAでテキストファイルを生成するコードを作ったのですが その際位置の指定をすることは可能ですか? Sub test() Dim myFSO As New FileSystemObject Dim ts As TextStream Dim MyFileName As String Dim MyPath As String MyPath = MyDesktop & "\" MyFileName = "test.txt" Set myFSO = CreateObject("Scripting.FileSystemObject") Set ts = myFSO.CreateTextFile(MyPath & MyFileName, True) CreateObject("Shell.Application").ShellExecute MyPath & MyFileName 'ここで位置の指定をしたい Set ts = Nothing Set myFSO = Nothing End Sub こんな感じのコードは作成しました。 With MyFileName .Top = 100 .Left = 100 End With みたいな感じで位置の指定は可能ですか? APIを使わないと無理ですか?

  • VBSでカンマ区切り

    お世話になっております。 VBSで、CSVファイルをカンマ区切りで配列にし、 ファイルに書き出したいです。 下記のスクリプトを実行すると3行の改行と これ⇒ ---------------- だけ出力されます。 Splitは使用できないのでしょうか? どこが間違っているのかわかりません。 ご教授いただけませんでしょうか。 '--------------------------------------------------------------- On Error Resume Next Set OBJFS01 = CreateObject("Scripting.FileSystemObject") Set CSVTEXT01 =OBJFS01.OpenTextFile("C:\tmp\CSVTEXT.log") Set LOGTEXT01 =OBJFS01.OpenTextFile("C:\tmp\LOGTEXT.log",8,False) '--------------------------------------------------------------- i = 0 Dim HAIRETU(27) Do While i < 6 HAIRETU(27) = Split(CSVTEXT01, ",") LOGTEXT01.WriteLine(HAIRETU(2)) LOGTEXT01.WriteLine(HAIRETU(3)) LOGTEXT01.WriteLine(HAIRETU(4)) LOGTEXT01.WriteLine("----------------") i = i + 1 Loop LOGTEXT01.close CSVTEXT01.close

専門家に質問してみよう