フルBASICでファイルのデータを配列に入れる ウダー 2005/09/20 20:17:30 └上のプログラムは「HAIRETSUは配列名ではあ... 青木太一 2005/09/21 07:04:17 └お答えありがとうございます。一応やって見... ウダー 2005/09/21 17:20:48 └ん?一行にカンマ区切りで数値があるのでな... 青木太一 2005/09/22 02:33:51 └やって見たけど何かおかしい。 ウダー 2005/09/22 15:03:08 └abc.txtの内容をそのままこの掲示板に貼り付... 青木太一 2005/09/22 15:21:24 └abc.txtの内容は ウダー 2005/09/22 19:10:41 └不思議だなー。たしかにhairetsu$(i)でうま... 青木太一 2005/09/23 01:03:31 └コードの結果 ウダー 2005/09/23 11:57:08 ├Windowsで作成したテキストファイルですか。... 白石 和夫 2005/09/23 13:23:58 │└補足 白石 和夫 2005/09/23 13:38:45 │ └ノートパードです。ちゃんと13と10は連... ウダー 2005/09/23 14:44:51 │ └できました。ちゃんと数字として読めました... ウダー 2005/09/23 15:06:10 └--ここから-- 青木太一 2005/09/26 06:42:55
フルBASICでファイルのデータを配列に入れる ウダー 2005/09/20 20:17:30 ツリーへ
フルBASICでファイルのデータを配列に入れる |
返事を書く |
ウダー 2005/09/20 20:17:30 | |
フルBASICでファイルのデータを配列に入れる方法を教えてください。 let f$= "abc.txt" open #1 : name f$ do mat input #1, if missing then exit do : hairetsu print hairetsu(a) LET a=a+1 loop ように書いてみたけど動かないです。教えてください。お願いします。 |
└上のプログラムは「HAIRETSUは配列名ではあ... 青木太一 2005/09/21 07:04:17 ツリーへ
Re: フルBASICでファイルのデータを配列に入れる |
返事を書く |
青木太一 2005/09/21 07:04:17 | |
上のプログラムは「HAIRETSUは配列名ではありません」 というエラーダイアログが出ると思いますが、 これはdim文でhairetsuを配列であると宣言していないからです。 またa=a+1をdo loopごとに行っているのが気になります。上のプログラムの動作は abc.txtの 1行目の1つめの数値 2行目の2つめの数値 3行目の3つめの数値 ... i行目のi個めの数値 を表示 というようなものですが、 おそらくやりたいことは 1行目の全数値 2行目の全数値 3行目の全数値 ... i行目の全数値 を表示 ではないでしょうか? 一応、そのように書き換えてみました。 let f$= "abc.txt" open #1 : name f$ LET n=5 ! abc.txtのなかで、一行あたりに書かれているカンマ区切りの数値の個数 dim hairetsu(1 to n) do mat input #1, if missing then exit do : hairetsu for i=1 to n print hairetsu(i); next i loop END お役にたてたら幸いです。 |
└お答えありがとうございます。一応やって見... ウダー 2005/09/21 17:20:48 ツリーへ
Re: 上のプログラムは「HAIRETSUは配列名ではあ... |
返事を書く |
ウダー 2005/09/21 17:20:48 | |
お答えありがとうございます。一応やって見たけどエラーが出ました。まー、とりあえずやりたいことを説明します。 abc.txtファイルにこのようにデータがあります。 10 20 30 … (何桁でもかまいません) これを配列に入れたいです。例えば hairetsu(1)=10 hairetsu(2)=20 hairetsu(3)=30 ..... どのようにすればいいでしょうか。教えてくださった方法でやると ”EXTYPE8013 データが余分” というエラーが出ます。 どうも mat input #1, if missing then exit do : hairetsu 文はあやしいみたいです。 教えてください。返事をまってます。 PS:私留学生で日本語がおかしかったらきいてくださいね。 |
└ん?一行にカンマ区切りで数値があるのでな... 青木太一 2005/09/22 02:33:51 ツリーへ
Re: お答えありがとうございます。一応やって見... |
返事を書く |
青木太一 2005/09/22 02:33:51 | |
ん?一行にカンマ区切りで数値があるのでなく、一行あたりには数値は一つなのですか? だとしたら 「何桁でもかまいません」じゃなくて「何行でもかまいません」ですよね? また、「mat input」ではなく「input」を使うのが自然です。 (ただ、そうだとすると”EXTYPE8013 データが余分”が出るのは変なんですが...まあ一応それは無視して) また、abc.txt内のデータは全角じゃなくて半角じゃないといけないと思います。 10 20 30 ではなくて 10 20 30 です。 さて、このようなとき、ファイルが何行あるのかわからないと配列の大きさを決められません。 十進BASICの配列は大きさを大きくできないので、 1.あらかじめ対応できる最大の行数を決めてしまう。 2.一度ファイルを全走査して何行あるのかをカウントし、 そこでdim文で配列をその行数だけ宣言し、 再度ファイルを走査しながら今度は配列に読み込む の二つの方法があると思いますが、とりあえずプログラムがシンプルな1の方法で書いてみました。 let f$= "w:\abc.txt" !数値が各行に一つづつ書かれたファイル open #1 : name f$ LET n=1000 ! abc.txtのとりうる最大の行数 dim hairetsu(1 to n) !配列にデータ読み込み for i=1 to n input #1, if missing then exit for : hairetsu(i) next i LET nn=i-1 !forループを抜けたときのi-1が有効な行数 !配列に入れたデータの表示 for i=1 to nn print "hairetsu(";i;")="; print hairetsu(i) next i END いかがでしょう? |
└やって見たけど何かおかしい。 ウダー 2005/09/22 15:03:08 ツリーへ
Re: ん?一行にカンマ区切りで数値があるのでな... |
返事を書く |
ウダー 2005/09/22 15:03:08 | |
やって見たけど何かおかしい。 エラーは ”読み込もうしたデータは数値定数でなかった”というエラ−なんです。 どうすればいいでしょうか。 |
└abc.txtの内容をそのままこの掲示板に貼り付... 青木太一 2005/09/22 15:21:24 ツリーへ
Re: やって見たけど何かおかしい。 |
返事を書く |
青木太一 2005/09/22 15:21:24 | |
abc.txtの内容をそのままこの掲示板に貼り付けてみてください。そうでないと原因がわかりません。 おそらく先に書いたとおりデータを全角じゃなくて半角にしなくてはいけないのを、修正していないのではないでしょうか。 --- 10 20 30 --- ではなくて --- 10 20 30 --- にしなくてはいけません。 または、そもそも数字ではない文字がabc.txtに入っているとか。 |
└abc.txtの内容は ウダー 2005/09/22 19:10:41 ツリーへ
Re: abc.txtの内容をそのままこの掲示板に貼り付... |
返事を書く |
ウダー 2005/09/22 19:10:41 | |
abc.txtの内容は 10 20 30 です。しかしhairetsu(i)はhairetsu$(i)といれたら結果が出ました。ファイルのなかのデータはやはり文字列として扱っているかな。 意見があれば言ってください。 |
└不思議だなー。たしかにhairetsu$(i)でうま... 青木太一 2005/09/23 01:03:31 ツリーへ
Re: abc.txtの内容は |
返事を書く |
青木太一 2005/09/23 01:03:31 | |
不思議だなー。たしかにhairetsu$(i)でうまくいくなら文字列として扱われているみたいですね。 私はhairetsu(i)でうまくいっているのに... 先頭の行が10で、最後の行が30なんですよね。 数値のある行の前に空行(改行だけされている)があったり、 数値がある最後行のあとに空行があると、その場合でも ”読み込もうしたデータは数値定数でなかった” がでます。 ためしに文字列配列を使った、以下のコードの実行結果を そのまま掲示板に貼り付けてください。 print "--ここから--" let f$= "abc.txt" !数値が各行に一つづつ書かれたファイル open #1 : name f$ LET n=1000 ! abc.txtのとりうる最大の行数 dim hairetsu$(1 to n) !配列にデータ読み込み for i=1 to n input #1, if missing then exit for : hairetsu$(i) next i LET nn=i-1 !forループを抜けたときのi-1が有効な行数 !配列に入れたデータの表示 for i=1 to nn print "hairetsu$(";i;")="""; print hairetsu$(i);"""" next i print "--ここまで--" END |
└コードの結果 ウダー 2005/09/23 11:57:08 ツリーへ
Re: 不思議だなー。たしかにhairetsu$(i)でうま... |
返事を書く |
ウダー 2005/09/23 11:57:08 | |
コードの結果 --ここから-- hairetsu$( 1 )="10" hairetsu$( 2 )="20" hairetsu$( 3 )="30" --ここまで-- なのです。 しかし実際の問題はウェブレットの問題です。データをファイルから読み込み処理する問題です。配列は文字列として扱った場合またべつの問題をでてきます。 以下のコードをみてください。 option base 0 ! 配列は0から始まる dim a(20) dim c(20) LET b=1000 LET n=2 ! abc.txtファイルに10,20,30,40 nの二乗データが4つある let f$= "abc.txt" !数値が各行に一つづつ書かれたファイル open #1 : name f$ dim S$(0 to b) !配列にデータ読み込み for cc=0 to b input #1, if missing then exit for : S$(cc) next cc print "Original data" for aa=0 to cc-1 print s$(aa); !ファイルから読んだデータを表示 next aa print " " print "Step Function" LET i=1 LET j=2 LET M=2^n for l=1 to n print "スイープ第 "; print l LET M=M/2 for k=0 to M-1 LET a(k)=(val(S$(j*k)) +val(S$(j*k+i)))/2 !二つつのデータを取って平均とる LET c(k)=(val(S$(j*k))-val(S$(j*k+i)))/2 !二つつのデータを取って変化とる LET val(S$(j*k))=a(k) !計算した平均を入れ替える LET val(S$(j*k+i))=c(k) !計算した変化を入れ替える print a(k); !平均をプリント print " "; next k print " " !隙間をあく print " " print " " LET i=j LET j=2*j next l END ここで LET val(S$(j*k))=a(k) と LET val(S$(j*k+i))=c(k)という文があやしいみたいです。 ファイルから数値として読めればいいけどそじゃないからこまっています。 何か意見がないですか。 |
├Windowsで作成したテキストファイルですか。... 白石 和夫 2005/09/23 13:23:58 ツリーへ
Re: コードの結果 |
返事を書く |
白石 和夫 2005/09/23 13:23:58 | |
Windowsで作成したテキストファイルですか。 行末がWindows標準のものでないと,数値データは正しく読めません。 次のプログラムを実行してみてください。 LET F$="abc.txt" OPEN #1:NAME F$ DO CHARACTER INPUT #1,IF MISSING THEN EXIT DO :s$ PRINT ORD(s$) LOOP CLOSE #1 END 実行結果は 49 48 13 10 50 48 13 10 51 48 13 10 となるはずですが,13と10が上のように連続して現れない場合は,Windowsのテキストファイルではありません。 |
│└補足 白石 和夫 2005/09/23 13:38:45 ツリーへ
Re: Windowsで作成したテキストファイルですか。... |
返事を書く |
白石 和夫 2005/09/23 13:38:45 | |
補足 数字の文字コードはその数字が表す数に48を加えたもの, CRは13 LFは10 空白は32です。 これら以外の数,特に,13と10の連続以外に0から31までの範囲の数が現れたら異常です。 |
│ └ノートパードです。ちゃんと13と10は連... ウダー 2005/09/23 14:44:51 ツリーへ
Re: 補足 |
返事を書く |
ウダー 2005/09/23 14:44:51 | |
ノートパードです。ちゃんと13と10は連続にプリントされます。テキストファイルの文字を数値として扱う方法はないんですか。あればたすかります。 |
│ └できました。ちゃんと数字として読めました... ウダー 2005/09/23 15:06:10 ツリーへ
Re: ノートパードです。ちゃんと13と10は連... |
返事を書く |
ウダー 2005/09/23 15:06:10 | |
できました。ちゃんと数字として読めました。私の間違いだと思います。ありがとうございました。 |
└--ここから-- 青木太一 2005/09/26 06:42:55 ツリーへ
Re: コードの結果 |
返事を書く |
青木太一 2005/09/26 06:42:55 | |
--ここから-- hairetsu$( 1 )="10" hairetsu$( 2 )="20" hairetsu$( 3 )="30" --ここまで-- のように表示されたのなら、文字列でなく数値としても読めるはずだと思うんだけどな...不思議だ。 なにはおもあれ、解決したみたいですから、おめでとうございます。 |