
VB6.0で改行コードが無く、半角と全角文字が入り混じっているファイルの読み取り方法を教えて下さい。
通常の一行読み込みの範囲を大幅に超えている文字列です。
他のサイトで以下のようなプログラム(20バイトずつ切り取って読む)を見つけたのですが、
Dim InFileNo As Integer
Dim Buf As string * 10
Dim LINE As Long
InFileNo = FreeFile
Open "C:\test.txt" For Random As #InFileNo Len = 20
LINE = 1
Do Until EOF(InFileNo)
Get #InFileNo, LINE, buf
LINE = LINE + 1
Loop
これだと、半角と全角が混じっている箇所で文字化けを起こしてしまいます。
以上です。よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
文字数指定の読み込みはInput(文字数,ファイル番号)という文を
使います。但し、EOFを超えるとエラーになるので、TextStreamの
方が楽かも知れません。以下はその例です。
Dim FSO, Txs
Dim Buf As String
Dim LINE As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Txs = FSO.OpenTextFile("C:\test.txt", 1) '1 は入力モード
Do Until Txs.AtEndOfStream
LINE = LINE + 1
Buf = Txs.Read(20) '20文字という意味
Loop
Txs.Close
Readメソッドは残りが20文字未満の場合、エラーにならず、残りの
文字列を返します。Input文では残りが指定文字数未満だとエラーに
なります。但し、EOF検出後にReadメソッドを実行すると、さすがに
エラーになります。
No.2
- 回答日時:
それは、20バイト固定にしたらおかしくなりますよね。
横着しないで、頭から文字コードを1文字ずつ抜き出して、
半角文字と全角1バイト目の文字(0x80~0x9Fと0xE0~0xFC)と2バイト目の文字を判定するべきです。
その他にヌル0x00や改行コードなどの制御文字コードをどうするかの処理も必要です。
それで、20バイト目が全角1バイト目の文字コードになるなら、
その文字はキャンセルして、頭から19文字だけ使用します。
次の読み込みでは、前回の最後の文字+次に読み込んだ20文字にして
また、頭から見ていきます。
No.1
- 回答日時:
どの程度の大きさのファイルなのでしょう?
Binaryモードで読み込んでStrConvなどで文字列に変換
なんて方法もありますよ
Dim arBin() as byte, ss as String
Open "C:\Test.txt" For Binary Access as #1
Redim arBin( LOF(1)-1 )
Get #1,, arBin
Close #1
ss = strConv(arBin, vbUnicode)
といった具合です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
TextFieldParserの固定長桁数を...
-
ファイル名の一部削除について
-
「シフトJIS X 0213」形式の文...
-
CString型 全角半角を意識せず...
-
一番右のスペース以降の文字列...
-
ワードのVBAで
-
C言語とWin32APIで全角かなの...
-
機種依存文字と特殊文字について
-
StrConvでUnicodeに変換出来な...
-
VBからID3タグをいじる方法
-
DAOの作成単位について
-
配列のペースト出力結果の書式...
-
2つ目のレコードの値を取得す...
-
VBA 変数名に変数を使用したい。
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
VB.NETでのAccessテーブルリンク
-
C#でbyte配列から画像を表示さ...
-
ワークテーブルの作成について
-
ACCESSで日別集計をする場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELのVBAでLenB関数について
-
ファイル名の一部削除について
-
StrConvでUnicodeに変換出来な...
-
CString型 全角半角を意識せず...
-
一番右のスペース以降の文字列...
-
「シフトJIS X 0213」形式の文...
-
エンコード・デコードの仕方
-
文字列から、null値を除去する方法
-
TextFieldParserの固定長桁数を...
-
VB6のテキストボックスに入力し...
-
VBからID3タグをいじる方法
-
【Excel VBA】セル内テキストの...
-
HEX
-
C#文字コードについて
-
文字列の中に半角文字があるか...
-
ASC関数
-
機種依存文字と特殊文字について
-
C言語とWin32APIで全角かなの...
-
エクセルマクロで文字列にメタ...
-
chrをintに変換すると…
おすすめ情報