dポイントプレゼントキャンペーン実施中!

VB6のCBool関数で
#付きの論理文字列? #TRUE#,#FALSE#
を読み込ませるとそれぞれbool値のTrue,Falseに変換してくれます。

.NET(2013)に移行して、互換の関数であるCBoolをそのまま使うとエラーが発生して変換できませんでした。
CBool関数について検索したりして調べたのですが、これらの文字列に対する処理が書かれたものは見つかりませんでした。

#TRUE#,#FALSE#をbool値に変換するには、文字列でそのまま比較して変換してやるしかないのでしょうか?

なぜ、こんなことを質問しているかというと、Write関数(WriteLine関数)でbool値をファイルに出力すると#TRUE# または #FALSE# で出力されるので、それをそのまま読み込みたいのです。
もちろん、例えば数値の1,0に変換して出力しておくなどの方法もありますが、それだと過去のファイルとの互換性がなくなるため、VB6で出力したファイルが使用できなくなります。

VB.NETでもWrite関数(WriteLine関数)で出力すると#TRUE#または#FALSE#と出力されるのでそれをそのまま読み込みたいのですが、VB.NETでは読み込めないというのは片手落ちの気がするのですが。

A 回答 (1件)

VB6とVB.NETは似てるけど別物と考えた方がいいです。



#TRUE#を Trueとして読むなら、Input関数が使えます。
https://msdn.microsoft.com/ja-jp/library/tty8298 …
おそらく、 VB6互換のWriteで書いたものは、同じく互換のInputで読む、というのが想定している使い方なのでしょう。


私なら、#True#も変換できる自家版Cboolを用意します。
#true# と #false#を大文字小文字区別無しに判定させればいいだけなので。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

Input 関数で直接ブール変数に読み込めば確かに読み込めるようですね。

現在のソースはInputでString変数に読み込み、そののちCBoolを使用してブール変数に変換するようになっております。
なぜそうなっているかは元のソースの製作者に聞かないとわかりませんが、特別な理由があるとすればエラー処理の関係かと思います。
読み込むファイルが必ずWriteで出力されたbool文字であればよいのですが、手で編集したもの、nullだった場合、項目数が違ってしまった場合などのエラーがどこで起きるかですね。

汎用性、互換性、エラー処理を考えるとおっしゃるとおり自前のCboolを用意するのが一番いいかもしれません。
ありがとうございました。

お礼日時:2017/05/24 09:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!