• ベストアンサー

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

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

110 REM EX1B by E/F on 2006/04/25 DEBUG by BLUEPIXY 120 PI=3.14159:PHI=30:Y0=.5 130 '************ Output into File ************ 140 CLOSE #1:OPEN "C:\TEMP\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:\TEMP\EX1B_OUT.TXT" FOR INPUT AS #2 250 IF EOF(2)<>0 THEN GOTO 290 260 INPUT #2,X,Y1,Y2,Y3 270 PRINT"Inp:x=";X;" y1=";Y1;" y2=";Y2;" y3=";Y3 280 GOTO 250 290 CLOSE #2 300 '***** Close All Files and Computer Stop***** 310 CLOSE 320 END

catnapist
質問者

お礼

できました~。ファイル入出力できました。エラーが出るといつも前の方ばかり見てしまって、200から先を見てませんでした。後ろの方も気をつけるようにます。遅い時間にご回答いただき有難うございました。

その他の回答 (4)

noname#20378
noname#20378
回答No.4

#3です ところで・・・自分はあまり詳しくないので識者の皆様に聞きたいんですが For ~NextにGotoで飛んだ場合のカウンタ変数って正しく動きますかね?

noname#20378
noname#20378
回答No.3

ちょっと前まで疑問だったけどたぶんこれ。 190 PRINT #1,X;",";Y1;",";Y2;",";Y3"  195 REM 250行目及び280行目から飛んできた場合は#2は開かれているが#1は開かれてない

catnapist
質問者

お礼

ご回答有難うございます、確かに矛盾していました。

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.2

>190 PRINT #1,X;",";Y1;",";Y2;",";Y3" 最後のY3の後ろにあるダブルコーテーション(”)は何なのかな? いらないと思いますが。

catnapist
質問者

補足

ご回答有難うございます。確かに要らないですね。でもプログラム全体には影響しないみたいです。実行画面で修正前と修正後を見比べたところ特にこれといったは変化はないです。

  • saru_1234
  • ベストアンサー率33% (452/1341)
回答No.1

はずしてたらすみません. ファイルへの書き込みのPRINT文は, PRINT#1,... のように, PRINT と #1 の間を空けなかったように 思いますが... (確認しようとしましたが資料が見つかりませんでした.)

catnapist
質問者

補足

ご回答有難うございます。PRINT#1(スペースなし)で実行いたしましたところ「文法エラーです」になっちゃいました。付け足しですが、元々のエラー内容は「ファイルがオープンされていません」です。

関連するQ&A

  • N88互換BASICで変換したが使えません。その2

    140 DEF FNF4$(X$) =MID$(X$,1,2)+":"+MID$(X$,3,2)+":"+MID$(X$,5,2) 150 DEF FNF5!(X$,X) =VAL(MID$(X$,X)) 160 CLS 170 LOCATE 20,10 :PRINT "3)How many sensors will you use?" 180 LOCATE 20+40,10 :PRINT " " 190 LOCATE 20+40,10 :LINE INPUT KO.TR$ 200 KO.TR=VAL(KO.TR$) 210 IF KO.TR<1 OR KO.TR>30 THEN BEEP :GOTO 180 220 LOCATE 25,10 :PRINT "Ready to send data?" 230 LINE INPUT AA$ 240 IF AA$<>"" AND AA$<>"Y" AND AA$<>"y" THEN *END. 250 *MAIN.START 260 CLS 270 LOCATE 25,10 :PRINT "****Start*****" 280 LOCATE 70, 0 :PRINT TIME$; 290 ' 300 'Writting data to floppy 310 *DISK.SET 320 FFF$="B:"+FNF1$(DATE$,TIME$) 330 OPEN FFF$ FOR OUTPUT AS #1 340 PRINT #1,Q$+DATE$+Q$+R$+Q$+STR$(KO.TR)+Q$+R$ 'DATE$,SENSORS 350 CLOSE 360 ' 370 'Sampling data every 30 seconds 380 *TIME.30 390 CONSOLE 0,25

  • コードが長すぎてエラーになってしますのですが・・・

    VB4を始めて1ヵ月の初心者です。 下記のように沢山のテキストファイルの中に、テキストボックスから 文字を代入したいのですが、コードが長すぎて「プロシージャが大きすぎます」とエラーが出てしまいます。 各テキストファイルのABCの部分は実際は100行以上有り、全体で2,000行を超えるとエラーが出てしまいます。 これはVB4の限界なのでしょうか。もし、もっと長いコードでも大丈夫な方法が有りましたら、アドバイスお願いします。 Private Sub Command1_Click() Open "C:001.txt" For Output As #1 Print #1, "A" Print #1, "B" Print #1, "C" Print #1, Text1.Text Print #1, "Z"   Close #1 Open "C:002.txt" For Output As #2 Print #2, "A" Print #2, "B" Print #2, "C" Print #5, Text2.Text Print #5, "Y" Close #2 ・ ・ ・ Open "C:100.txt" For Output As #100 Print #100, "A" Print #100, "B" Print #100, "C" Print #100, Text1.Text Print #100, "D" End Sub

  • 指定列を抜き出す

    V1 , V2 , V3 , V4 , V5 , V6 5.9, 3.9, 0.7, 3.9, 5.8, 5.1 4.1, 6.4, 3.8, 3.3, 5.8, 9.3 3.1, 2.3, 1.8, 2.7, 3.6, 5.6 6.8, 4.2, 2.1, 3.3, 4.9, 5.1 2.3, 0.3, -1.7, -2.1, -1.7, 1.10 8.0, 4.7, 3.7, 6.9, 6.2, 5.5 さらに続く 上記のようなテキストデータがファイルAに入っており これからV1,V3,V5のデータだけを抽出し、 ファイルBに格納するプログラムを作成中なのですが、 データの読み込みと書き込みの部分は作成したのですが、 どのようにすれば抽出できますでしょうか? ソフトはVB6です。よろしくお願いします 'ファイル読み込み Open "C:\A.txt" For Input As #1 FlLen = LOF(1) txt = Input(FlLen, #1) Close #1 'ファイル書き込み Open "C:\B.txt" For Output As #1 Print #1, txt Close #1

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

    例えば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

  • 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

  • エクセルから外部テキストの置換をしたいです

    お時間があるかた、どうぞご教授下さい>< ================================ Dim FT As String Open "C:\1.txt" For Input As #1 Open "C:\2.txt" For Output As #2 Do While Not EOF(1) Line Input #1, FT FT = Replace(FT, ">", "\n") Print #2, FT Loop Close #1 Close #2 ================================ というマクロをエクセルで書いたのですが、テキスト上では>が\nに変換されているだけです。 テキストのほうで、ある文字(今回は>)を『改行』するにはどうしたらいいのでしょうか? エクセルのマクロから出来るようにしたいのです。 よろしくお願い致します。

  • N88互換BASICで変換したが使えません。その3

    400 LOCATE 0, 0 :PRINT DATE$; 410 LOCATE 25, 0 :PRINT TR$(TR.NO); 420 LOCATE 70, 0 :PRINT TIME$; 430 TM$=" " 440 WHILE TM$<>"00" AND TM$<>"30" 450 LOCATE 70, 0 :PRINT TIME$; 460 MID$(TM$,1,2)=MID$(TIME$,7,2) 470 XXX!=FRE(0) ' 480 WEND 490 LOCATE 0, 0 :PRINT DATE$; 500 LOCATE 25, 0 :PRINT TR$(TR.NO); 510 LOCATE 70, 0 :PRINT TIME$; 520 GOSUB *DISK.OUT 530 GOTO *TIME.30 540 ' 550 'Writting data to floppy 560 *DISK.OUT 570 PRINT:TR.NO=1 580 ON TR.NO GOSUB *TR.1,*TR.2 590 XXX!=FRE(0) ' 600 RETURN 610 ' 620 ' 630 *TR.1 640 KO.J=0 :PV$="" 650 CLS 660 LOCATE 0, 2 :PRINT "***Getting data***" 670 OPEN "COM:E8N" AS #1 680 PRINT #1,"TS0" 690 PRINT #1,CHR$(&H1B)+"T" 700 PRINT #1,"FM0,01,30" 710 LINE INPUT #1,DM$ 720 WHILE MID$(DM$,2,1)<>"E" :LINE INPUT #1,DM$ :WEND 730 PRINT #1,"FM0,01,30" 740 LINE INPUT #1,DM$

  • 指定の行数目から行を抽出する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを使っています. Perlでしたいことは,「指定の行数目から行を抽出する」ことです. 具体的には以下のようにしたいと思っております. data.txt A B C D E F line.txt 2 4 6 output.txt B D F 先ほどある方からサンプルソースを教えてもらったのでそれをベースに作ってみましたが,出力のoutput.txtが空のままです. use strict; use warnings; use feature ':5.10'; use IO::File; open my $file2, '<', 'line.txt' or die "can't open input $!"; chomp(my @subjects = <$file2>); close $file2; open my $newfile, '>>', 'data_out.txt' or die "can't open output $!"; open my $file, '<', 'data.txt' or die "can't open input $!"; while (my $line = <$file>) { chomp $line; foreach my $line (@line) { print $line; if ($. eq $subjects){ say {$newfile} $line; } } } close $file; close $newfile; どこが間違っているのでしょうか.ご指摘ください.よろしくお願いします.

    • ベストアンサー
    • Perl
  • N88 basicプログラムの質問(ノルム計算)1

    N88 basicプログラムにおいて鉱物のノルム計算ができるようにしたいのですが、プログラムを打ち込んだのですが、うまく動きません。どなたかわかる方がいればご教授頂きたく願います。 かなり長くなりますが、ぜひともお願い致します。 下記、打ち込んだプログラムとなります。 長いので、質問を分けて入力します。 10 ' 20 '***** normative calculation program for clay minerals ***** by T,Igarashi,1983 30 ' 40 OPTION BASE 1 50 CONSOLE 0,25,0,1 60 WIDTH 40,25 70 ' 80 ' 90 DIM A$(22),DMY$(22),AA$(22),B1$(31),M$(8),L$(8) 100 DIM A(8,22),A1(22),A2(22),B(31),B0(8,31),C9(31),TOTAL(2,8) 110 GOSUB *INIT.1 120 ON ERROR GOTO 5000 130 GOSUB *ENTER 140 FOR QQ=1 TO NN 150 GOSUB *INIT.2 160 IF KORF=1 THEN GOSUB *FILE ELSE GOSUB *KEYBOARD 170 GOSUB *STORE 180 GOSUB *CALC 190 GOSUB *OUTPUT 200 NEXT QQ 210 GOSUB *PRINTOUT 220 GOTO 130 230 ' 240 ' 250 ' 260 *INIT.1 270 RESTORE 290 280 FOR I=1 TO 22 : READ AA$(I) : READ A2(I) : NEXT 290 DATA SIO2,60.085,TiO2,79.899,Al2O3,101.961,Fe2O3,159.692,FeO,71.846,MnO,70.937,MgO,40.304,CaO,56.079,Na2O,61.979,K2O,94.195 300 DATA P2O5,141.943,Cl,35.453,SO3,80.57,S,32.6,Cr2O3,151.989,ZrO2,123.218,F,18.99,CO2,44.9,H2O+,18,H2O-,1,Ig.LOSS,1,Others,1 310 RESTORE 330 320 FOR I=1 TO 31 : READ B1$(I) : NEXT 330 DATA Q,C,ad,mi,ab,an,ka,se,ch,gi,mo,pp,dp,al,Z,hl,th,cc,mg,sd,li,mt,he,cm,pr,il,ru,ap,fr,en,ot 340 C9(1)=A2(1) : C9(2)=A2(3) : C9(3)=A2(1)+A2(3) : C9(4)=A2(10)+A2(3)+A2(1)*6 : C9(5)=A2(9)+A2(3)+A2(1)*6 : C9(6)=A2(8)+A2(3)+A2(1)*2 : C9(7)=A2(3)+A2(1)*2+A2(19)*2 350 C9(8)=A2(10)+A2(3)*3+A2(1)*6+A2(19)*2 : C9(9)=A2(7)*5+A2(3)+A2(1)*3+A2(19)*4 : C9(10)=A2(3)+A2(19)*3 : C9(11)=A2(9)*33+A2(3)+A2(7)+A2(1)*4+A2(19)*4 : C9(12)=A2(3)+A2(1)*4+A2(19) 360 C9(13)=A2(3)+A2(19) : C9(14)=A2(10)+A2(3)*3+A2(13)*4+A2(19)*6 : C9(15)=A2(1)+A2(16) : C9(16)=(A2(9)-16)/2+A2(12) : C9(17)=A2(9)+A2(13) : C9(18)=A2(8)+A2(18) : C9(19)=A2(7)+A2(18) : C9(20)=A2(5)+A2(18) 370 C9(21)=A2(4)+A2(19) : C9(22)=A2(4)+A2(5) : C9(23)=A2(4) : C9(24)=A2(5)+A2(15) : C9(25)=A2(5)-16+A2(14)*2 : C9(26)=A2(2)+A2(5) : C9(27)=A2(2) : C9(28)=A2(8)*10+A2(11)*3+A2(19) 380 C9(29)=A2(8)-A2(17)*2 : C9(30)=A2(1)+A2(7) : C9(31)=1 : DD=0 390 FOR I=1 TO 31 : B(I)=0 : NEXT 400 RETURN 410 ' 420 ' 430 ' 440 *ENTER 450 C=0 : KORF=0 : SCREEN 3,3 : CLS 3 : SCREEN 3,0 : LINE(0,0)-(639,199),6,BF : COLOR 2 460 LOCATE 0,5 : PRINT "How many samples (Max 8 samples)";: INPUT NN 470 IF NN>8 THEN CLS 1 : GOTO 460 480 IF NN=0 THEN GOTO *PROEND 490 COLOR 2 : LOCATE 0,8 : PRINT "Input data from Keyboard or File or End : K/F/E" 500 Y$=INKEY$ 510 IF Y$="" THEN 490 520 IF Y$="e" OR Y$="E" THEN GOTO *PROEND 530 IF Y$="k" OR Y$="K" THEN KORF=0 : RETURN 540 IF Y$<>"f" AND Y$<>"F" THEN 490 550 KORF=1 560 RETURN 570 ' 580 ' 590 ' 600 *INIT.2 610 CLS 1 620 FOR I=1 TO 22 : A(QQ,I)=0 : NEXT I 630 FOR I=1 TO 31 : B(I)=0 : B0(QQ,I)=0 : NEXT I 640 RETURN 650 ' 660 ' 670 ' 680 *FILE 690 OPEN "data.1" AS #1 700 FIELD #1,40 AS MINERAL$,40 AS L1$ 710 FOR I=1 TO 22 : FIELD #1,(I-1)*4+80 AS DMY$(I),4 AS A$(I) : NEXT 720 MAX=LOF(1) : IF MAX=0 THEN RETURN 440 730 LOCATE 1,2 : PRINT MAX;"records are filing." 740 IF DD=1 THEN 800 750 LOCATE 2,5 : PRINT "You need list (Y/N)?": Y$=INKEY$ 760 IF Y$"" THEN 750 770 IF Y$="N" OR Y$="n" OR Y$="ミ" THEN 800 780 IF Y$="Y" OR Y$="y" OR Y$="ン" THEN GOSUB *NAME.LIST : GOTO 800 790 GOTO 750 800 LOCATE 2,10 : INPUT "Record No.";N 810 IF N>MAX THEN CLS 1 : GOTO 730 820 GET #1,N 830 M$=MINERAL$ : L$=L1$ 840 FOR I=1 TO 11 : A(QQ,I)=CVS(A$(I)) : A(QQ,I+11)=CVS(A$(I+11)) : NEXT 850 CLOSE #1 : DD=1 860 LOCATE 2,15 : PRINT "Correct data : Y/N"; : Y$=INKEY$ 870 IF Y$="" THEN 860 880 IF Y$="Y" OR Y$="y" THEN C=1 : GOTO 1120 890 IF Y$="N" OR Y$="n" THEN RETURN 180 900 GOTO 860 910 ' 920 ' 930 ' 940 *NAME.LIST 950 LPRINT 960 LPRINT CHR$(27) ; "V0960" ;CHR$(&H8) 970 LPRINT "Sample Name" ; TAB(40); "Locality" 980 LPRINT CHR$(27);"V0960";CHR$(&H8) 990 FOR II=1 TO MAX 1000 GET #1, II 1010 M$=MINERAL$ : L$=L1$ 1020 LPRINT M$; TAB(40); L$ 1030 NEXT 1040 LPRINT CHR$(27) ; "V0960";CHR$(&H8) 1050 LPRINT CHR$(12) 1060 RETURN 1070 ' 1080 ' 1090 ' 1100 *KEYBOARD 1110 M$="" : L$="" : FOR I=1 TO 22 : A(QQ,I)=0 : NEXT I

  • 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);

専門家に質問してみよう