プログラムの内容の概要は「バイナリデータをテキストデータに変換する」
です。編集を行ってる際に
・Get #1,○,○ の○の中に何を記述すればよいか
1090 1790 2390 2990行目
・Dim () As Double のカッコ内に文字を使いたいがどうしたらいいか
1710 2320 2930行目
の2項目でつまづいてしまいました。
また、エラー表示にはなっていませんが、
Field #1,128 As X$ 1070行目
Field #1,128 As Y$ 1071行目
と同じ#1を2行に分けて表現しているのですが大丈夫でしょうか。
BASIC自体も初心者で非常に初歩的な質問であるとは思いますが
よろしくお願いします。
コード: 全て選択
#N88BASIC
1000 '****************************************************
1010 ' FFTANA.BAS
1020 '*
1030 '************************************************************
1040 DIM D(256) As Double '型が合っているかどうか
1041 DIM PNT As Double
1042 DIM X$ As Double
1043 DIM Y$ As Double
1044 DIM N As Double
1045 DIM M As Double
1050 PNT=400 'PNTは何を意味するのか point?
1060 OPEN "DAT3-14.FRK" As #1 ' FILE NAME
1070 FIELD #1,128 As X$ ' DATA BUFFER
1071 FIELD #1,128 As Y$ 'この辺あってるか不安
1080 '
1090 GET #1 '表現がわからない
1100 FOR N=1 TO 128
1110 M=N
1120 D(M)=Asc(Mid$(X$,N,1))
1130 NEXT
1140 FOR N=1 TO 128
1150 M=N+128
1160 D(M)=Asc(Mid$(Y$,N,1))
1170 NEXT
1180 CLOSE
1190 GOTO 1210
1200 '
1210 '************ ADRESS OF<Gaa> DATA *******************
1211 DIM STBAA As Long
1212 DIM DTBAA As Long
1220 STBAA=D(147)*256+D(148) ' START BLOCK NO.
1230 DTBAA=(D(150)*256+D(151))*256+D(152) ' DATA1 BYTE NO.
1231 DIM X1 As Long
1232 DIM X2 As Long
1233 DIM X3 As Long
1234 DIM X4 As Long
1240 X1=D(153) :X2=D(154)
1250 X3=D(155) :X4=D(156)
1251 DIM SIGN As Double
1252 DIM EXPO1 As Double
1253 DIM EXPO# As Double
1254 DIM FRAC# As Double
1255 DIM SCL# As Double
1256 DIM RE As Double
1257 DIM RE# As Double
1258 DIM SCLAA As Double
1260 SIGN=(-1)^((X1 AND 128)/128)
1270 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1280 EXPO#=2^EXPO1
1290 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
1300 SCL#=SIGN*EXPO#*FRAC#
1310 IF Abs(RE#)<=1E-38 THEN RE=0
1320 SCLAA=SCL#/10^6
1330 GOTO 1350
1340 '
1350 '************* ADRESS OF <Gbb> DATA *****************
1351 DIM STBBB As Double
1352 DIM DTBBB As Double
1353 DIM SCLBB As Double
1360 STBBB=D(163)*256+D(164) ' START BLOCK NO.
1370 DTBBB=(D(166)*256+D(167))*256+D(168) ' DATA BYTE NO.
1380 '
1390 X1=D(169) :X2=D(170)
1400 X3=D(171) :X4=D(172)
1410 SIGN=(-1)^((X1 AND 128)/128)
1420 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1430 EXPO#=2^EXPO1
1440 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
1450 SCL#=SIGN*EXPO#*FRAC#
1460 IF Abs(RE#)<=1E-38 THEN RE=0
1470 SCLBB=SCL#/10^6
1480 GOTO 1500
1490 '
1500 ' *********** ADRESS OF <Gbb> DATA ******************
1501 DIM STB As Double
1502 DIM DTB As Double
1503 DIM KK As Long
1504 DIM SCLAB As Double
1510 STB=D(179)*256+D(180) ' START BLOCK NO.
1520 DTB=(D(182)*256+D(183))*256+D(184) ' DATA3 BYTE NO.
1530 KK=2
1540 X1=D(185) :X2=D(186)
1550 X3=D(187) :X4=D(188)
1560 SIGN=(-1)^((X1 AND 128)/128)
1570 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
1580 EXPO#=2^EXPO1
1590 FRAC#=(X2 OR 128)/128*X3/(128*256)+X4/(128*256*256)
1600 SCL#=SIGN*EXPO#*FRAC#
1610 IF Abs(RE#)<=1E-38 THEN RE=0
1620 SCLAB=SCL#/10^6
1630 GOTO 1650
1640 '
1650 '
1660 D(256)=0
1670 '
1680 '
1690 '
1691 DIM LOOP As Double 'LOOPで定義するのはよくないかも.色が変わってる
1692 DIM DTM As Long
1700 LOOP=Int(DTB/256)+1
1710 DIM DD(DTB+300) As Double '()内をどう表現するか.文字はまずいらしい
1720 DIM BB(420) As Double
1730 DIM AF(420) As Double
1740 DIM AI(420) As Double
1741 DIM AR(420) As Double
1742 DIM I As Double
1750 OPEN "DAT3-14.FRK" As #1 'FILE NAME
1760 FIELD #1,128 As X$ 'DATA BUFFER
1761 FIELD #1,128 As Y$ 'DATA BUFFER
1770 FOR I=1 TO LOOP 'LOOPを他の文字に変えて表現しなくていいのか?
1780 '
1790 GET #1,STB+I
1800 FOR N=1 TO 128
1810 M=256*(I-1)+N
1820 DD(M)=Asc(Mid$(X$,N,1))
1830 NEXT
1840 FOR N=1 TO 128
1850 M=256*(I-1)+N+128
1860 DD(M)=Asc(Mid$(Y$,N,1))
1870 NEXT
1880 NEXT
1890 CLOSE #1
1900 '
1910 '
1911 DIM P As Long
1712 DIM W As Long
1713 DIM S As Long
1714 DIM REAB As Double
1920 OPEN "DAT-GAB.DAT" FOR OUTPUT As #2
1930 P=KK*4
1940 W=0
1950 S=0
1960 FOR N=1 TO DTB STEP P
1970 X1=DD(N) :X2=DD(N+1)
1980 X3=DD(N+2) :X4=DD(N+3)
1990 '
2000 SIGN=(-1)^((X1 AND 128)/128)
2010 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
2020 EXPO#=2^EXPO1
2030 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
2040 RE#=SIGN*EXPO#*FRAC#
2050 IF Abs(RE#)<=1E-38 THEN RE=0 :GOTO 2090
2060 RE=RE#/10^6
2070 REAB=RE*SCLAB
2080 '
2090 '
2100 '
2101 DIM X5 As Long
2102 DIM X6 As Long
2103 DIM X7 As Long
2104 DIM X8 As Long
2105 DIM IM As Double
2106 DIM IM# As Double
2107 DIM IMAB As Double
2108 DIM R As Double
2109 DIM CISO As Double
2110 X5=DD(N+4) :X6=DD(N+5) ' IMAG DATA READ
2120 X7=DD(N+6) :X8=DD(N+7)
2130 SIGN=(-1)^((X5 AND 128)/128)
2140 EXPO1=((X5 AND 127)*2+(X6 AND 128)/128)-127
2150 EXPO#=2 ^ EXPO1
2160 FRAC#=(X6 OR 128)/128+X7/(128*256)+X8/(128*256*256)
2170 IM#=SIGN*EXPO#*FRAC#
2180 IF Abs(IM#)<=1E-38 THEN IM=0 :GOTO 2240
2190 IM=IM#/10^6
2200 IMAB=IM*SCLAB
2210 R=Sqr(RE*RE+IM*IM)
2220 AI(S)=IM
2221 AR(S)=RE
2230 CISO=IM/RE
2231 AF(S)=180/3.1415*Atn(CISO)
2232 BB(S)=R
2233 '
2234 '
2235 '
2236 '
2237 '
2240 S=S+1
2250 PRINT #2 ,W,REAB,IMAB
2260 W=W+0.25
2270 NEXT N
2280 CLOSE #2
2290 '
2300 '
2310 LOOP=Int(DTBAA/256)+1
2320 DIM DD#(DTBAA+300) As Double
2330 DIM BB#(420) As Double
2340 '
2350 OPEN "DAT3-14.FRK" As #1
2360 FIELD #1,128 As X$
2361 FIELD #1,128 As Y$
2370 FOR I=1 TO LOOP
2380 '
2390 GET #1,STBAA+I
2400 FOR N=1 TO 128
2410 M=256*(I-1)+N
2420 DD#(M)=Asc(Mid$(X$,N,1))
2430 NEXT
2440 FOR N=1 TO 128
2450 M=256*(I-1)+N+128
2460 DD#(M)=Asc(Mid$(Y$,N,1))
2470 NEXT
2480 '
2490 NEXT
2500 '
2510 CLOSE #1
2520 OPEN "DAT-GAA.DAT" FOR OUTPUT As #2
2530 '
2540 S=0
2550 W=0
2560 P=4
2570 FOR N=1 TO DTBAA STEP P
2580 X1=DD#(N) :X2=DD#(N+1)
2590 X3=DD#(N+2) :X4=DD#(N+3)
2600 SIGN=(-1)^((X1 AND 128)/128)
2610 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
2620 EXPO#=2^EXPO1
2630 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
2640 RE#=SIGN*EXPO#*FRAC#
2650 IF Abs(RE#)<=1E-38 THEN RE=0 :GOTO 2700
2660 RE=RE#/10^6
2661 DIM GAA As Double
2670 GAA=SCLAA*RE
2680 BB#(S)=1/RE
2690 S=S+1
2700
2710 PRINT #2 ,W,GAA
2720 W=W+0.25
2730 NEXT N
2740 '
2750 CLOSE #2
2760 '
2761 DIM GAI As Double
2762 DIM GAIN As Double
2763 DIM GAINY As Double
2764 DIM GAINN As Double
2765 DIM GAIN# As Double
2766 DIM FASE As Double
2770 OPEN "GAIN.DAT" FOR OUTPUT AS #2
2780 W=0.25
2790 FOR S=1 TO 400
2800 GAI=BB(S)*BB#(S)
2810 GAIN=Log(GAI)
2820 GAINY=Log(10)
2830 GAINN=GAIN/GAINY
2840 GAIN#=20*GAINN
2841 FASE=AF(S)
2842 IF AR(S)>0 AND AI(S)>0 THEN FASE=FASE
2843 IF AR(S)>0 AND AI(S)<0 THEN FASE=FASE
2844 IF AR(S)<0 AND AI(S)<0 THEN FASE=FASE-180
2845 IF AR(S)<0 AND AI(S)>0 THEN FASE=FASE+180
2850 PRINT #2,W,GAIN#,FASE
2860 W=W+0.25
2870 NEXT S
2880 CLOSE #2
2900 '
2910 '
2920 LOOP=Int(DTBBB/256)
2930 DIM DDD(DTBBB+300) As Double
2940 '
2950 OPEN "DAT3-14.FRK" As #1
2960 FIELD #1,128 As X$
2961 FIELD #1,128 As Y$
2970 FOR I=1 TO LOOP
2980 '
2990 GET #1 ,STBBB+I
3000 FOR N=1 TO 128
3010 M=256*(I-1)+N
3020 DDD(M)=Asc(Mid$(X$,N,1))
3030 NEXT
3040 FOR N=1 TO 128
3050 M=256*(I-1)+N+128
3060 DDD(M)=Asc(Mid$(Y$,N,1))
3070 NEXT
3080 '
3090 NEXT
3100 CLOSE #1
3110 '
2930 DIM GBB# As Double
2930 DIM GBB As Double
3111 OPEN "DAT-GBB.DAT" FOR OUTPUT As #2
3112 '
3113 W=0
3120 P=4
3130 FOR N=1 TO DTBBB STEP P
3140 X1=DDD(N) :X2=DDD(N+1)
3150 X3=DDD(N+2) :X4=DDD(N+3)
3160 SIGN=(-1)^((X1 and 128)/128)
3170 EXPO1=((X1 AND 127)*2+(X2 AND 128)/128)-127
3180 EXPO#=2^EXPO1
3190 FRAC#=(X2 OR 128)/128+X3/(128*256)+X4/(128*256*256)
3200 GBB#=SIGN*EXPO#*FRAC#
3210 IF Abs(GBB#)<=1E-38 THEN GBB=0 :GOTO 3240
3220 GBB=SCLBB*GBB#/10^6
3230 '
3240 '
3250 PRINT #2 ,W,GBB
3251 W=W+0.25
3260 NEXT N
3270 CLOSE #2
3280 '
3290 END