- ベストアンサー
2次元配列のデータをファイルへ保存
教えて下さい。 a(100,200)の2次元配列のデータをファイルに保存したいのですが、 a(0,0),a(0,1),a(0,2).......a(0,200) a(1,0)....... a(2,0)... . . . a(100,0)...................a(100,200) といった感じでカンマ区切りでCSV形式で保存したいのですが、これを簡単にファイルに保存する方法を 教えて下さい。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
; をつけないと改行されてしまうようです。 for i=0 to 100 for k=0 to 199 write #1,a(i,k); next k write #1,a(i,200) next i これでどうでしょうか?
その他の回答 (5)
- Hayashi_Trek
- ベストアンサー率44% (366/818)
Writeは必ず改行が入るので、Printを使ってください。 for i=0 to 100 for k=0 to 200 Print #1, a(i,k); If k = 200 Then Print #1, "" Else Print #1, ","; End if next k next i
- imogasi
- ベストアンサー率27% (4737/17069)
#2のものです。#1の補足の >するとデータがすべて縦に並んでしまいました 私のも縦に並びます。メモ帳などで見ると縦に 配列1つずつ並んで見えると言うことでしょうが これは「縦に並ぶ」とは言いません。復帰改行コード (vbCrLf)がWrite#ステートメント発行時毎に入ると言うことです。 (完成ごエクセルの表のセルに読みこませたいとは、書いてないですね。) それでそうしたいのであれば、仮にsと言うStringを定義し For k=1 to 200 s="" For i=1 to 100 s=s & a(k,i) & "," next i s=s & vbCrLf Print #1,s next k のように100まで溜め込み、復帰改行と共に書き出せばよい。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
Open "test.csv" For Output As #1 for i=0 to 100 for j=0 to 199 write #1,a(i,j), next j write #1,a(i,200) next i close #1 end
- imogasi
- ベストアンサー率27% (4737/17069)
大事なことで、処理のスタートは、どこなんでしょうか。 と言うのは、(1)プログラムの途中で、配列a(x,y)の dim a(100)にデータが出来ていて、それをテキスト ファイルに落としたいのか(2)紙の上にデータがあって いまから(多分キーボードインプットで)入力して、読みこんだ時にa(x,y)の形に出きる、テキストファイルを作るのかです。 #1のお答えは(1)を前提にしているようです。 (2)で有れば、配列名aは当然入力不要で、x,yはペア で入れることになるでしょう。また配列要素x、yはデータの中に持たなくても良いでしょうね。 x1,y1,x2,y2,x3・・・でも良いし、x1;y1,x2;y2,x3;・ でも良い。後者はセパレータは,,/,;,-など、どれか決めて おけば良いと思う。入力手数は前者後者とも同じですが、 読み込んだ時、前者はx$,Y$で受けられる。後者はセパレータで分割せねばならない。しかし1データ飛ばして全体がずれる恐れは少ない。後者の例。テスト済み。 Sub test01() Dim a As String Open "c:\My Documents\aa2.txt" For Output As #1 For i = 1 To 1000 a = InputBox("(x,y)=") If a = "end" Then GoTo ed Write #1, a Next i ed: Close #1 End Sub 復帰改行(レコード区切り)を要素1個1個に入れるかも 配列要素数がもっと多ければ、考える余地があろう。
- taknt
- ベストアンサー率19% (1556/7783)
ファイルをオープンしてある状態で、出力するところだけです。 for i=0 to 100 for k=0 to 199 write #1,a(i,k) & "," next k write #1,a(i,200) next i 上記のように二重ループにすればいいかと思います。 ファイルに出力する部分は、ちょっと違うかもしれませんが・・・。 ま、参考程度に。
補足
ありがとうございます。 実際に試してみました。 するとデータがすべて縦に並んでしまいました。 私の説明が悪かったとは思いますがやりたいことは、 この回答を例に取ると、 for k=0 to 200 のデータを横一列にならべて、 for i=0 to 100 のデータを縦一列にならべて、 100*200のセルに当てはめるやり方が知りたいのです。 よろしくお願いします。
補足
ありがとうございます ちなみに処理のスタートは(1)です。