

こんにちは。
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
No.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だったらスペースを埋めるという処理をしています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) エラー処理 3 2022/04/11 14:58
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CString型 全角半角を意識せず...
-
エクセルで13,410円を数値の134...
-
エンコード・デコードの仕方
-
StrConvでUnicodeに変換出来な...
-
VB6のテキストボックスに入力し...
-
EXCELのVBAでLenB関数について
-
全角文字と半角文字を判別して...
-
文字列から、null値を除去する方法
-
ファイル名の一部削除について
-
アクセス ステータスバーの文...
-
文字列の中に半角文字があるか...
-
2つ目のレコードの値を取得す...
-
accessでフィールド追加のあと...
-
アクセステーブル、リンクとロ...
-
『列名 '担当者CD' があいま...
-
配列の格納方法
-
INT64対応のprintf系関数はあり...
-
COBOL数値転記の仕様
-
CheckBoxの配列化
-
VBA 変数名に変数を使用したい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
StrConvでUnicodeに変換出来な...
-
CString型 全角半角を意識せず...
-
TextFieldParserの固定長桁数を...
-
ファイル名の一部削除について
-
一番右のスペース以降の文字列...
-
アクセス ステータスバーの文...
-
機種依存文字と特殊文字について
-
文字列から、null値を除去する方法
-
「シフトJIS X 0213」形式の文...
-
VB6のテキストボックスに入力し...
-
ワードのVBAで
-
【Excel VBA】セル内テキストの...
-
エンコード・デコードの仕方
-
マルチバイト混在の文字列整形
-
VBからID3タグをいじる方法
-
VB6.0 文字列のファイル書...
-
Access VBAの参照設定(DAO)につ...
-
VBScriptで半角カナと半角英数...
-
ASC関数
おすすめ情報