プロが教えるわが家の防犯対策術!

こんにちは。
VB6.0を研修中の新人です。
テキストファイルにランダムアクセスをし半角全角混じりの文字列を書き込むコードを考えています。
連休中は会社に入れないので自宅でコードをどのように書くかある程度決めておきたいです。

■ あいうえお
■ カキクケコ
■ サシスセソ   (サシスセソは半角です)  
■ タチツテトはひ (タチツテトは半角です)

メモ帳.txtに文字列を書き込むと上記のように書き込まれます。
これは見た目が悪いので下記のように"■ "がないように書き込むことは無理でしょうか。

あいうえお
カキクケコ
サシスセソ    (サシスセソは半角です)
タチツテトはひ  (タチツテトは半角です)

いま書いたコードは下記のとおりです。

Public Sub Main()
WriteFile
End Sub

'書き込む関数
Public Sub WriteFile()
  Dim i As Integer
  Dim str As String
  Open "C:\メモ帳.txt" For Random As #1 Len = 14
  Do While < 5
    Select Case i
      Case 1 str="あいうえお"
      Case 2 str="カキクケコ"
      Case 3 str="サシスセソ"       (サシスセソは半角です)
      Case 4 str="タチツテトはひふへほ" (タチツテトは半角です)
    End Select
    strNagasa(str,10) + vbCrlf
    Put #1,i,str
    i = i + 1
  Loop
  Close #1
End Sub

'文字列をレコードの長さに合わせる関数(いまの場合は10バイト)
'Nagasaが"10"の場合
'strが "サシスセソ" なら "サシスセソ" に半角スペースを5個詰めて返す。
'strが "タチツテトはひふへほ" なら "タチツテトはひ" の9バイトで文字列を切って半角スペースを1個詰めて返す。
Public Function StrNagasa(str As String,Nagasa As Integer) As String
  ...
  省略(完成済み)
  ...
End Function

A 回答 (1件)

>"■ "がないように書き込むことは無理でしょうか。


ランダムアクセスファイルでは先頭にレコード長が付くので無理です。
第一、テキストファイルをランダムアクセスするという発想が理解できません。
普通、テキストファイルはシーケンシャルアクセスしかしないものです。
VBのランダムアクセスはVBのランダムアクセスでしか入出力しないことを前提とするものだからで、メモ帳で見ておかしいのは当然です。

>文字列をレコードの長さに合わせる関数
Open時にレコード長を指定しているので、パディングは原則として不要です。
尚、文字数≠バイト数です。Lenは文字数を返す関数でバイト数ではありません。VB内では文字はUnicodeであらわされるので、全て1文字=2バイトです。LenBはこのバイト数を返すので、常にLenの戻り値の2倍です。
Shift-JISでのバイト数が知りたい場合はWindowsAPIのlstrlen(文字列中にChr(0)が無いことが前提)を使うと便利ですが、
本格的にやるにはWindowsAPIの変換関数を使うか、ADODBのStreamオブジェクトで変換します。
    • good
    • 0
この回答へのお礼

やはり無理なんですね。
これからAccess、SQLSever、どれに接続するかはまだ決まってませんが、ファイル処理の理解もかねて今のところテキストファイルでデータベースの登録、更新、削除などをやってます。
Input,Output,Appendモードをつかったシーケンシャルアクセスや構造体をつかったランダムアクセスもやりました。では文字列でランダムアクセスをやったらどうなるかを考えてみました。
ヘルプを見ると可変長文字列は2バイトの制御コードがつくと書かれていたので多分"■ "はそれだろうと思っていました。
レコード長だったんですね。
ありがとうございました。

ちなみに、あまりダラダラ書きたくなかったので省略しましたが、文字列をレコードの長さに合わせる関数はStrConv(str,vbFromUniCodo)で文字コードを変換してからMidB(str,1,Nagasa)で切り取りStrConv(str,vbUniCodo)で戻して最後の文字がvbNullCharだったらスペースを埋めるという処理をしています。

お礼日時:2008/05/04 21:22

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

このQ&Aを見た人はこんなQ&Aも見ています