• ベストアンサー

データを別なプログラムでも利用したいのですが

例えばAのプログラムで for x=1 to 10 y=x-5 next x として(x,y)の値を何らかのファイルとして保存し 別なプログラムBでそのデータを利用して picture1.pset(x,y) と作りたいのですが、このときはどのように作ればよいのでしょうか 宜しくお願いします。VB6を使っています 最初のプログラム(A)では↓こんな風に作るのかなと思いますが… Open "C:\WINDOWS\デスクトップ\実験.dat" For Output As #1 For x = 1 To 10 y = x-5 Write #1, x, y Next x Close #1

  • e33
  • お礼率86% (276/318)

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

こんにちは。maruru01です。 No.1の方の回答の訂正です。 Open "C:\WINDOWS\デスクトップ\実験.dat" For Input As #1 Do Until EOF(1) Input #1, x Input #1, y picture1.pset(x,y) Loop Close #1 EOFの中は"#"はいりません。

e33
質問者

お礼

ありがとうございます うまくいきました

その他の回答 (3)

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

X,Yは隣接する組みデータとして、書き出すことになるでしょう。 (1)VB、BASICのWriteステートメントは、出力項目が数値の時(本件はこればかりでしょう)はカンマを、ストリング(文字列)のときは、引用符(””)を付けて出力しますから、上記例でOKでしょう。Print#ステートメントというのもありますので、調べておいてください。 (2)ForNext文は回数が決まっている時の利用が便利ですが、出力データ数が不定の時は他のものを考える 方が良い。データの終わりを何で伝えるか、考慮が必要です。昔はENDと打ちこんだ時をデータの終わりにした者ですが。 (3)グラフを書くのであれば、点を打つ(Pset) より、微小線を引くLineの方がてきしているのでは ないのでしょうか、散布図なら点を大きくして出来るのかも知れない。わたしも充分勉強していないので、明確に理由を述べられませんが、Psetでやってグラフの像が薄いようでしたら、LINEを考えてください。本日別質問で放物線を書く例の解答をしているのでご参考にしていただければ。 (4)本件はVBらしいですが(プログラム言語はVBばかりでありません)、データが出来たあと、扱う言語によっては、固定長のフィールドを書き出したほうが扱いやすいことがありますので、その点を考慮したほうが良いです。

e33
質問者

お礼

回答ありがとうございます ってゆうか皆さん説明が少なくて失礼しました ちなみにvb6でデータファイルを作成して 今度はそのデータファイル内の値を読み込むプログラムの作り方を 教えてもらいたかったのですが…

noname#2567
noname#2567
回答No.2

 VBのバージョンが書いて無いのですが。  私が使っているVB6を前提に書きます。  私なら・・・。  一時出力するデータファイルは、カンマ区切りテキストで出力します。  データを再利用する側のプログラムでは、テキストを一気に読み込み、Array関数で配列変数に。  この方法だと、保存する要素の数が変化しても、要素数に応じて配列を自動で確保(できるようにコーディングする必要はありますが。)できるので、データ数を決め打ちするのと違って、あとあと自由度が高くなって楽です。  ちなみに、ファイルアクセスの部分も、全てテキスト処理なので、ローレベルなファイル処理を行うOpen~Closeではなく、FSO(FileSystemObject)を使用し、TextStreamとして処理します。  FSOではバイナリ処理はできませんが、テキストファイルの処理や、様々なファイル操作は、FSOを使うのがVBの標準的な作法です。  Open~Closeの処理は、FSOで扱えないバイナリファイル処理や、過去のバージョンとの互換性のために残してあるものです。  FSOを使用したファイル操作の場合、ファイルをTextStreamオブジェクトとして扱えるので、オブジェクト名をきっちりつければ複数のファイルをオープンした時にファイルを取り違えたりする事が少ないですし、クローズ処理を忘れていても、オブジェクトを開放すれば自動的にクローズされるので、オープンされたファイルを残したまま終了してしまうようなミス(いや、本当はこう言うアバウトな使い方は良く無いんですけどね。)も無くなります。  詳細は、VBのhelpを、Array関数・FSO・TextStreamオブジェクトなどをキーに検索してみてください。  Visual Basicの使用方法/プログラミングガイド/visual Basicを使ってできる事/ドライブ、フォルダ、ファイルの処理・・・のあたりに、FSOの基本的な使い方の解説もあります。

e33
質問者

お礼

回答ありがとうございます ちなみにバージョン6を使っています(VB6→visualbasic6の略でした) ほとんど独学でやっているので 初めて聞いた単語も幾つか出てきましたが Array関数・FSO・TextStreamの方向で調べてみます

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

Open "C:\WINDOWS\デスクトップ\実験.dat" For Input As #1 Do Until EOF(#1) Input #1, x,y picture1.pset(x,y) Loop Close #1 こんな感じでいけるのかな? 未確認です。

e33
質問者

お礼

回答ありがとうございます ところが Do Until EOF(#1) で「構文エラー」になるので、うまくいきませんけれども…

関連するQ&A

  • N88互換BASICのプログラムについて。

    私は機械科3年ですが、今年からBASICを勉強しています。次のプログラムのエラー(行番号190にてopenしたファイルに出力できないです)がどうしても解決できないです。N88互換BASICやられている方でどなたか私にアドバイスをしていただけると助かります。 110 REM EX1B by E/F on 2006/04/25 120 PI=3.14159:PHI=30:Y0=.5 130 '************ Output into File ************ 140 CLOSE #1:OPEN "C:\WINBASIC\EX1B_OUT.TXT" FOR OUTPUT AS #1 150 FOR X=0 TO 360 STEP 45 160 A=.2 :Y1=A*SIN((X-PHI))+Y0 170 A=1.2 :Y2=A*SIN((X-PHI))+Y0 180 A=2 :Y3=A*SIN((X-PHI))+Y0 190 PRINT #1,X;",";Y1;",";Y2;",";Y3" 200 PRINT"Out:";X;",";Y1;",";Y2;",";Y3 210 NEXT X 220 CLOSE #1 230 '************ Input from File ************** 240 CLOSE #2:OPEN "C:\WINBASIC\EX1B_OUT.TXT" FOR INPUT AS #2 250 IF EOF(2)<>0 THEN GOTO 190 260 INPUT #2,X,Y1,Y2,Y3 270 PRINT"Inp:x=";X;" y1=";Y1;" y2=";Y2;" y3=";Y3;" 280 GOTO 150 290 CLOSE #2 300 '***** Close All Files and Computer Stop***** 310 CLOSE 320 END

  • VBでオープンしたファイルの制御をCのプログラムに渡す方法

    VBでファイルのオープンをしてそのファイルの制御を Cのプログラムに渡す方法ってありますか? やりたいことを具体的にいうと ファイルのオープン、クローズはVBでやって、 ループの中の変数の値を、Cのプログラムに渡して Cのプログラムの中で印字するって処理をやりたいのです。 Cのプログラムをコールする際の引数で VBで開いたファイルハンドル、出力したい変数の値を 渡してやれば良いのかなと思ったのですが、うまくいかないようです。 なにか方法があれば教えてください。 宜しくお願い致します。 Dim i as Integer Open "\test.txt" For Output As #1 for i=0 to 10 call Cのプログラム(#1、i) next i close #1

  • FORTRANのプログラム

    今、実験の解析を行っています。 読み込みたいテキストファイルには -1,0.4 0,0,233 -1,0.9 ・・など左側には-1か0のどちらかがあります。 これを -1,0.4 -1,0.9 を含むファイルと 0,0.0233 を含むファイルの二つに分けたいのです。 今プログラムを作っているのですがどうしてもできません。 どうしたらいいのでしょうか? program dat real x(10), y(10) open(7,file='test.txt') do i=1,10 read(7,*,end=200) x(i),y(i) end do do j=1,10 if(x(j).eq.0.0) then open(8,file='aftest1.txt') write(8,*) y(j) else open(9,file='aftest2.txt') write(9,*) y(j) end do close(8) close(9) 200 close(7) end

  • テキストのデータ型

    ある数式を計算しグラフを作るプログラムを作っていますが、テキストに数式をいれて、計算させようとすると、「型が一致しません」とでます。ソースは以下の通りです。 For x1 = xsta to xend y1=CSng(Text1.Text) Picture1.PSet (x1, y1) next x1 ここで、text1に「2*x1+1」みたいな数式を入れたいと考えています。 ちなみにxsta,xend,x1,y1ともにsingleです。CSngの使い方が間違っているのでしょうか?よろしくお願いします。

  • グラフを書きたいのですがどのようにして使うかわかりません

    FOR I=-200 to 200 FOR J=-200 to 200 X(0) = I / 100 ; Y(0) = J / 100 FOR N=0 to 1000 X(N+1) = X(N)^2 - Y(N)^2 + X(0) Y(N+1) = 2*X(N)*Y(N)+Y(0) IF X(N)^2 + Y(N)^2 > 4 THEN PSET(I,J) WHITE ELSE IF N = 1000 THEN PSET(I,J) BLUE ELSE NEXT N END IF NEXT J; NEXT I というグラフを書くプログラムがあるのですがこのプログラムの使い方がわからなくて使えないのでどのようにすれば見れるのか教えてください。

  • 消す軌跡と残す軌跡

    For t = 0 To 6 Step 0.01 Picture1.Line (0, 0)-(Cos(t), Sin(t)) Picture1.Cls Picture1.PSet (Cos(t), Sin(t)) Next t アニメーションで Line文の描く軌跡は消したいのでClsを使ったのですが Pset文の描く軌跡は残したいのです。 その場合どうしたらいいのでしょうか? 上のプログラムですとline文の軌跡もPset文の軌跡も消えてしまいます。

  • データの読み出しと書き込み

    初めて質問します。最近独学でVBを勉強中ですが、VB6.0でCドライブ内にあるテキストデータA(10行程度で1行あたり8文字前後のひらがな)を読み込み、それを昇順(あいうえお順)に並べ替え、テキストデータBにその並べ替えたデータを反映させたいのです。現在、 RF(リードファイルの略として)="C:\aaa\テキストデータA.txt" Open RF For Input As #1 Do While Not EOF(1) Line Input #1. x y = y + x Loop Close 1 これで、yには10行のひらがなデータをつなげた1行のデータが入っていたのですが、そのあとのソートプログラムへのつなげ方や、もう1度OpenさせてテキストデータBに反映させてCloseするまでがわからなく困っています。よろしくお願いします。

  • VBによる回帰直線のプログラム

    VB6を本を見ながら勉強していますが、どの本にもフォーム上にグラフを表示するものばかりでピクチャボックスに回帰直線y=ax+bの直線を描けるようにはどうしたらいいのかプログラムに困っています。どなたか分かる方いましたらよろしくお願いします。ちなみにプログラムはこのようになっています; Private Sub Command1_Click() Dim c(10) As Double Dim d(10) As Double Dim cx As Integer, cy As Integer, lx As Integer, ly As Integer '----------------------------------------------------------------- 'ピクチャボックスの初期化 Picture1.Cls 'グラフの位置 cx = 60 cy = 320 lx = 300 ly = 300 'グラフ枠を描画 Picture1.FillColor = QBColor(15) Picture1.Line (cx, cy)-(cx + lx, cy - ly), , B '縦軸の目盛り Picture1.DrawStyle = 2 '線の種類 点線 For i = 0 To 5 Picture1.Line (cx, cy - 60 * i)-(cx + lx, cy - 60 * i) Picture1.CurrentX = cx - 25 'ラベルを表示する場所の指定 Picture1.CurrentY = cy - 60 * i '横軸を描画 Picture1.Print Format(i) 'ラベル出力位置を設定 '(i*縦軸の目盛りの倍数 現在は10倍 Next i '横軸の目盛り For i = 0 To 5 Picture1.Line (cx + 60 * i, cy)-(cx + 60 * i, cy - ly) Picture1.CurrentX = cx + 60 * i Picture1.CurrentY = cy + 5 Picture1.Print Format(i) Next i '------------------------------------------------------------------------ Dim n As Integer 'n:データ数 n = Val(Text3.Text) For i = 0 To n - 1 c(i) = Val(Text1(i).Text) d(i) = Val(Text2(i).Text) Next i 'データを○印でプロット For i = 0 To n - 1 Picture1.Circle (cx + 60 * c(i), cy - 60 * d(i)), 3, QBColor(0) Next i 'ここまで成功---------------------------------------------------------------------- 'xに関する平均値と標準偏差の計算プログラム Dim sx As Double, sxx As Double, avx As Double, sdx As Double Dim x(10) As Integer For i = 0 To n - 1 x(i + 1) = c(i) Next i sx = 0 sxx = 0 For i = 1 To n sx = sx + x(i) sxx = sxx + x(i) * x(i) Next i avx = sx / n sdx = Sqr((sxx - n * avx * avx) / n) 'yに関する平均値と標準偏差の計算プログラム Dim sy As Double, syy As Double, svy As Double, sdy As Double Dim y(10) As Double 'インデックスが範囲を超えているのエラーの解決 10を代入 For i = 0 To n - 1 y(i + 1) = d(i) Next i sy = 0 syy = 0 For i = 1 To n sy = sy + y(i) syy = syy + y(i) * y(i) Next i avy = sy / n sdy = Sqr((syy - n * avy * avy) / n) '-------------------------------------------------------------------------------------- '回帰直線y=ax+bを描く End Sub

  • perlプログラム内で中間ファイルを利用するには

    perlプログラムについて 処理1 の アウトプットデータを用いて、処理2を行うというのを1つのperlのプログラム内で実装したいと考えています。 処理1のアウトプットファイルの書き出しに時間がかかり 処理2が先に動き、ファイル読み込みできずに終わってしまいます。 処理1のアウトプットファイル書き出しが終了を待ってから、処理2を実施したいのですが、 どのように記載すればよいのでしょうか? 例) perl program.pl AAA > BBB program.pl 内 open(OUT1,"> program1_work"); open(ARG,$ARGV[0]); while(<ARG>){ 処理1 print OUT1 "XXXXXX"; } close(ARG); open(ARG1,OUT1); while(<ARG1>){ 処理2 print "XXXXXX"; } close(ARG1);

  • VBで円を書いたとき、同じにならないのですが。どうしてでしょう?

    VBで、円を描いたとき Circle (CX, CY), 450 で、描いた円と Pi = 3.14159265 For i = 1 To 120 dd = i * 3 x = Cos((90 - dd) * Pi / 180) y = -Sin((90 - dd) * Pi / 180) HX = CX + x * 450 HY = CY + y * 450 PSet (HX, HY) Next i で、描いた円が、重ならないのですが、何故でしょうか? Circle で、描いた円の方が縦が、少し短いような感じになります。

専門家に質問してみよう