ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 04:12

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 14 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年3月06日(月) 10:16 
オフライン

登録日時: 2006年2月20日(月) 10:12
記事: 4
popopoです。
AB4は、過去の資産活用に大変有用で感謝しております。

さて、不具合報告です。
不具合1. INPUT,INPUT #の指数表記読込み不可
1.2345e-003等が、1.2345と解釈される。

過去の資産活用のため、修正して頂ければ幸いです。

--P.BAS--
#prompt
10 DIM X As DOUBLE
30 OPEN "IN" FOR INPUT AS #1
40 OPEN "OUT" FOR OUTPUT AS #2
50 INPUT #1,X
60 PRINT #2,X
70 END

--IN--
1.2345e-03

--OUT--
1.2345

使用環境
windows2000sp4
AB 4.22.00


通報する
ページトップ
投稿記事Posted: 2006年3月06日(月) 22:34 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
一時的にこのような方法を使うこともできます。
コード:
#prompt
Declare Function sscanf CDECL Lib "crtdll" (lpString As *Char,lpFormat As *Char,...) As Long
10 DIM X As DOUBLE,S$
30 OPEN "IN" FOR INPUT AS #1
40 OPEN "OUT" FOR OUTPUT AS #2
50 INPUT #1,S$
60 sscanf(S$,"%lf",VarPtr(X))
70 PRINT #2,X
80 END
※Input文の認識部分もこの関数を使えば一発なんですけどね…。
※Cランタイムの関数を使うとは反則か?

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 09:54 
オフライン

登録日時: 2006年2月20日(月) 10:12
記事: 4
hiraさん、すばらしい方法ですね。

ちょっと欲を言って、
INPUTとの代替には柔軟な可変長対策が必要なのです。
対応策はないでしょうか

IN側は、1行に含まれる数値の個数が変化
IN作成側を修正するのは、困難

---P2.BAS---
#prompt
10 DIM X As DOUBLE
30 OPEN "IN" FOR INPUT AS #1
40 OPEN "OUT" FOR OUTPUT AS #2
50 WHILE NOT Eof(1)
60 INPUT #1,X
70 PRINT #2,X
80 WEND
90 END

---IN---
1.0001e-03 2.0002e-03 3.0003e-03 4.0004e-03
1.0001e-03 2.0002e-03 3.0003e-03
1.0001e-03 2.0002e-03
1.0001e-03

---OUT---
1.0001
2.0002
3.0003
4.0004
1.0001
2.0002
3.0003
1.0001
2.0002
1.0001


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 10:40 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
String型で読み込んでVal関数使ったらどうなる?

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 14:37 
オフライン

登録日時: 2006年2月20日(月) 10:12
記事: 4
Val()も指数表記不可。仮数部のみの実数として解釈される
AB 4.22.00

第一希望は、ABを修正されることをですが、
第二希望は、INPUTと置換可能な関数の定義

他の方は、必要性を感じていないのでしょうか。
Basicを使うのは、過去の資産の活用ではないのかな?

ご意見は大変ありがたいのですが
要望多ならみんなで声を大にして、ABを修正してもらった方が
ソースがすっきりするのですが。。。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 15:54 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
余談ですが、Get #関数もうまく機能していないようです。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 18:19 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
Val関数を編集すれば、INPUT #の問題もValの問題も一度に解決です(^^;
Include\basic\function.sbp について

1. sscanfの定義をファイル先頭辺りに追加する。
定義は私が投稿した通りです。

2. 818行目あたり「Else」~「End If」の中を削除し
そこに sscanf(buf,"%lf",VarPtr(Val)) の1行を入力する。

一時しのぎではありますが…。
元のファイルをバックアップした方がいいかもしれません。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 20:27 
オフライン

登録日時: 2006年2月20日(月) 10:12
記事: 4
hiraさん、すばらしい。抜本的解決策です。

可変長を対象にも、ソース無修正で期待通り機能しました。
次回リリースではそのとおり修正されるのではないでしょうか?作者様(^^;

投稿No.09でのソースに対する出力
---OUT---
0.0010001
0.0020002
0.0030003
0.0040004
0.0010001
0.0020002
0.0030003
0.0010001
0.0020002
0.0010001


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月07日(火) 21:05 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
ただこの方法に問題がないかといえば「ない」と100%言い切れるものではありません。
例えば、指数を読み込むようなプログラムのソースを配布すると、(バージョンアップで修正されたとしても)ActiveBasicのバージョンによってはどうしても正しく動かないことが出てきてしまいます。
また、Win64になるとCランタイムがどうなるかわかりません(DLLのファイル名・仕様etc...)。
ただ、sscanfは16進数や8進数にも対応しており、
コード:
sscanf("755","%o",VarPtr(i)) '8進数 755 を10進数に変換
とか
コード:
sscanf("1000","%x",VarPtr(i)) '16進数 1000 を10進数に変換
というコードも書けてしまいます(iはLong型の変数)。
そうなると、実質Val関数は内部でsscanfを呼び出せば済む話になってしまいます…。
このことはStr$にもいえて、こちらはsprintfという関数(Cランタイム)を呼び出せばそれで解決します(小数がいらない場合は標準定義のwsprintfでもできます)。

やっぱりCランタイムなんて邪道ですかね?>山本さん

>konisiさん
Get #はどのような不具合があるのでしょう?ひょっとしたらVal関数のように修正ができるかもしれません。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名: Get #関数
投稿記事Posted: 2006年3月07日(火) 23:07 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
一応、4.13に格下げして対処してますが、4.22においてファイル内容が読み込まれません。
デバック実行にて確認。
コード:
'外部ファイル:pi1.txt,約16KB,内容・・・数列
#console
Dim FileName$ As String,OutFileName$ As String,OFN2$ As String
Dim A$ As String,A As Long,B As Long,C As Long
Dim D(9) As Long
Dim I As Long,J As Long
FileName$="pi1.txt"
OutFileName$="pi2.txt"
OFN2$="dat2.txt"
Open FileName$ As #1
Open OutFileName$ As #2
Field #1,1
Field #2,1
Do
	debug
	Get #1,I,A$
	debug
	B=A
	A=Val(A$)
	C=(A-B+10) Mod 10
	A$=Str$(C)
	Put #2,I,A$
	D(C)=D(C)+1
	J=J+1
	if Eof(1)=-1 then exit Do
Loop
Close #1
Close #2
Open OFN2$ For Output As #1
For I=0 To 9
	A$=Str$(I)+"	"+Str$(D(I))+"	"+Str$(D(I)/J*100)+"%"
	Print #1,A$
Next I
Close #1
Print "END"
Sleep(5000)
End
pi1.txt

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名: Re: Get #関数
投稿記事Posted: 2006年3月09日(木) 19:35 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
当方では動いていますが…?

[pi2.txt] ※先頭の100文字を掲載
引用:
1374434982318249156264890559526526067884534604486953489875501431771358666686881098662314438189063612…
[dat2.txt]
引用:
0 1575 9.613037109375%
1 1711 10.443115234375%
2 1630 9.94873046875%
3 1649 10.064697265625%
4 1655 10.101318359375%
5 1606 9.80224609375%
6 1661 10.137939453125%
7 1641 10.015869140625%
8 1617 9.869384765625%
9 1639 10.003662109375%
この結果でいいでしょうか?
Ver 4.22.00 Windows XP Home (SP2) で確認。
※無修正function.sbpでも問題なし。

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
 記事の件名: はて?
投稿記事Posted: 2006年3月09日(木) 20:40 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
暫く原因追求に時間掛けたいと思います。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月22日(水) 04:29 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
そういえば以前,hiraさんが指数表記対応のVal関数を作っていましたね。
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=59

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年3月22日(水) 09:06 
オフライン

登録日時: 2005年5月31日(火) 20:14
記事: 203
お住まい: 兵庫県
まだCランタイムが活用できることを知らず、必死に解析してみたプログラムです(^^;;
一番環境依存がない方法ですが(何

_________________
[hira]
http://hira.hopto.org/


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 14 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[15人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean