- ベストアンサー
テキストへの保存方法
N個(毎回変動します)のテキストファイルがあります。 その中に360行2列のデータがあります。 このN個のテキストを1つのテキストファイルにまとめて、 360行(2×N)列のデータにして保存したいです。 '------------------保存するプログラム------------------------- SaveName = Dir2.Path & "\" & Nam & ".txt" Open SaveName For Output As #1 For i Write #1, V1(1,i),VRMS(1,i),V1(2,i)・・・V1(N,i),VRMS(N,i) next i Close #1 '-------------------------------------- 上のプログラムの4行目 Write #1, V1(1,i),VRMS(1,i),V1(2,i)・・・V1(N,i),VRMS(N,i) ですが毎回変動するため何列になるかわかりません。 行の場合でしたらFor NEXTを使えばよいと思うのですが、 横に増えてい場合どのようにすればよいのでしょうか? VB6で作成しています。 アドバイスよろしくおねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Forループを2重にまわせば良いように思いますよ ' Read用のファイル番号用の配列 dim nFiles(255) as integer for nn = 1 to N ' Read用ファイルのOpen nFiles(nn) = FreeFile open "InputName"& nn as input as nFiles(nn) next OutFn = FreeFile open saveName for output as OutFn for i = 01 to 360 for j = 1 to N Input #nFiles(nn), v1, vrms if j <> N then write #OutFn, v1, vrms, else write #OutFn,v1, vrms end if next next Close OutFn ' Openしたファイルの後始末 for i = 1 to N Close nFiles(i) next といった具合です
その他の回答 (3)
ANo2と実質的には同じです。 <Test.txt> 101,1010 102,1020 201,2010 202,2020 このように交互に書き出すサンプルコードです。 Private Sub Command1_Click() Dim I As Integer Dim J As Integer Dim N As Integer Dim M As Integer Dim L As Integer Dim V(1, 1) As String Dim W(1, 1) As String Dim strText As String V(0, 0) = "101" V(0, 1) = "102" V(1, 0) = "201" V(1, 1) = "202" W(0, 0) = "1010" W(0, 1) = "1020" W(1, 0) = "2010" W(1, 1) = "2020" N = UBound(V(), 1) M = UBound(V(), 2) For I = 0 To N For J = 0 To M strText = strText & V(I, J) & "," & W(I, J) & vbCrLf Next J Next I FileWrite "C:\temp\test.txt", strText End Sub 一つのテキストファイル情報を作成してからファイルに書き出しています。 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
お礼
回答ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
項目(フィールド)セパレータ文字で、Split関数で分離する。 バリアント配列(s)に入るから、Ubound(s)で項目数はつかめる。 上記コードはInput #1,aも書いてないが(もうすこし丁寧に), s=Split(a,",") for j=0 to Ubound(s) XX=s(j) Next j Write # は便利なのだが、上記配列と相性は良くない。 Sub test03() a = Array("aaa", 12345, "ccc") nam = "test01A" MsgBox CurDir SaveName = CurDir & "\" & nam & ".txt" Open SaveName For Output As #1 For i = 1 To 2 For j = 0 To UBound(a) Write #1, a(j); Next j Write #1, Next i Close #1 End Sub メモ帳で確認すると "aaa",12345,"ccc", "aaa",12345,"ccc", のように終わりにカンマが着く。これで辛抱できれば良いが。 ーー Write #1, a(j); Write #1, が使えそうなことを認識した。 ーー 最悪Print #で書き出すため、カンマなどのセパレターで区切った文字列の編集を、別途しなければならない。 文字列か数値か判断 文字列の場合には””で囲む 項目区切りセパレータを入れて連結する やり方にも夜が多分最終のカンマを削る 書き出す文字列の完成
お礼
こういった方法があるなんて まったく思いつきませんでした。 参考になりましたありがとうございます。
- gatyan
- ベストアンサー率41% (160/385)
write ぢゃなくて print を使う print #1,変数; の様に最後に ;(セミコロン)をつけると改行されない ただし、writeと違って文字列を""で囲んでくれなかったり、区切りのカンマは自分で出力する必要あり
お礼
参考になりました。 ありがとうございます。
お礼
プログラムを組むことができました。 ありがとうございました。