- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6.0 文字列のファイル書き込み)
VB6.0での文字列ファイル書き込みとは?
このQ&Aのポイント
- VB6.0を研修中の新人が、テキストファイルにランダムアクセスをして半角全角混じりの文字列を書き込むコードを考えています。自宅でコードをどのように書くかある程度決めておきたい状況です。
- メモ帳.txtに文字列を書き込むと「■ 」が付いてしまいますが、これを取り除いて記述される方法はありますか?
- VB6.0で書かれたコードは、テキストファイルに5つの文字列をランダムアクセスします。文字列の長さを指定する関数も用意されています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>"■ "がないように書き込むことは無理でしょうか。 ランダムアクセスファイルでは先頭にレコード長が付くので無理です。 第一、テキストファイルをランダムアクセスするという発想が理解できません。 普通、テキストファイルはシーケンシャルアクセスしかしないものです。 VBのランダムアクセスはVBのランダムアクセスでしか入出力しないことを前提とするものだからで、メモ帳で見ておかしいのは当然です。 >文字列をレコードの長さに合わせる関数 Open時にレコード長を指定しているので、パディングは原則として不要です。 尚、文字数≠バイト数です。Lenは文字数を返す関数でバイト数ではありません。VB内では文字はUnicodeであらわされるので、全て1文字=2バイトです。LenBはこのバイト数を返すので、常にLenの戻り値の2倍です。 Shift-JISでのバイト数が知りたい場合はWindowsAPIのlstrlen(文字列中にChr(0)が無いことが前提)を使うと便利ですが、 本格的にやるにはWindowsAPIの変換関数を使うか、ADODBのStreamオブジェクトで変換します。
お礼
やはり無理なんですね。 これからAccess、SQLSever、どれに接続するかはまだ決まってませんが、ファイル処理の理解もかねて今のところテキストファイルでデータベースの登録、更新、削除などをやってます。 Input,Output,Appendモードをつかったシーケンシャルアクセスや構造体をつかったランダムアクセスもやりました。では文字列でランダムアクセスをやったらどうなるかを考えてみました。 ヘルプを見ると可変長文字列は2バイトの制御コードがつくと書かれていたので多分"■ "はそれだろうと思っていました。 レコード長だったんですね。 ありがとうございました。 ちなみに、あまりダラダラ書きたくなかったので省略しましたが、文字列をレコードの長さに合わせる関数はStrConv(str,vbFromUniCodo)で文字コードを変換してからMidB(str,1,Nagasa)で切り取りStrConv(str,vbUniCodo)で戻して最後の文字がvbNullCharだったらスペースを埋めるという処理をしています。