• ベストアンサー

テキストへの保存方法

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で作成しています。 アドバイスよろしくおねがいします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

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 といった具合です

kuragekunn
質問者

お礼

プログラムを組むことができました。 ありがとうございました。

その他の回答 (3)

noname#140971
noname#140971
回答No.4

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

kuragekunn
質問者

お礼

回答ありがとうございました。

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

項目(フィールド)セパレータ文字で、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 #で書き出すため、カンマなどのセパレターで区切った文字列の編集を、別途しなければならない。 文字列か数値か判断 文字列の場合には””で囲む 項目区切りセパレータを入れて連結する やり方にも夜が多分最終のカンマを削る 書き出す文字列の完成

kuragekunn
質問者

お礼

こういった方法があるなんて まったく思いつきませんでした。 参考になりましたありがとうございます。

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

write ぢゃなくて print を使う print #1,変数; の様に最後に ;(セミコロン)をつけると改行されない ただし、writeと違って文字列を""で囲んでくれなかったり、区切りのカンマは自分で出力する必要あり

kuragekunn
質問者

お礼

参考になりました。 ありがとうございます。

関連するQ&A