![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Function FileGetChar(ByVal f As String, ByVal p As Integer) As String
Dim n As Integer = FreeFile()
Dim c As Char = “”
If File.Exists(f) Then
FileOpen(n, f, OpenMode.Random, OpenAccess.Read, , 1)
Seek(n, p)
If Not EOF(n) Then
FileGet(n, c)
End If
FileClose(n)
End If
Return c
End Function
このようにSeek関数とFileGet関数を利用する限りでは2バイト文字の化け字は避けられない!
一体、この私の判断は正しいのでしょうか?
VB2008 Express Edition
No.1ベストアンサー
- 回答日時:
私自身はそういう「素のままのバイナリファイルを扱う」経験はほとんど無いですが。
> 一体、この私の判断は正しいのでしょうか?
「このように」がどの範囲を行っているかわからないので回答は難しいですが、回避方法はあると思います。
>2バイト文字
ということは、内部的にはShift JISコードで格納されていると言うことでしょうか?(UTF-8やEUC_JPでは3バイトの文字もあった記憶が…)
参考:
http://www.atmarkit.co.jp/fxml/askxmlexpert/024u …
大前提として、(VB4以降では)String、Charなどの文字データの内部形式はUNICODEです。(つまりchar型は2バイト)
だから、上記の例で言うと、1バイト読み込んだ時点で内部的には2バイトのUNICODE文字列に変換されています。
なので、通常、バイナリ読み込みで文字列を読み込む場合はいったんバイト配列に格納してそれを一括で文字列に変換する方法をとることが多いはずです。
…といろいろ調べたらこんなページが見つかりました。参考になるのでは?
http://dobon.net/vb/bbs/log3-7/3702.html
まあ、ここではBinaryReaderを使っていますが、大事なのは
バイナリ配列を「sjisEnc.GetString」で日本語文字列に変換している部分。
(ReadBytes(3)は、FileGet(n, c)をで買い繰り返して3バイト分読み込むのと一緒なわけで)
ん?あれ?…というか、今気づいたのですが。
Binaryではなく、「レコード長1バイトのランダムファイル」でOPENして、2バイト文字を取得するというのはすごく不自然なのですが…。
よくわからなくなってきたので、質問文のコードのおかしい点。
*バイト配列ではなく、Charに直接突っ込んでいる
*バイト単位で読み込むのに「レコード長1バイトのランダムファイル」でOPENしている。
要するにSeek関数とFileGet関数(あとFileOpen)の「使い方がおかしい」ということだと思います。
英語圏で開発されたプログラミング言語。
ですから、何文字目をダイレクトに取得することも可能。
しかし、半角全角混在テキストでは不能。
仮に、半角全角混在テキストで1文字を固定長として宣言する方法があれば・・・。
また、そういう変換機能があれば・・・。
だと、話が違ってきます。
その辺りの情報を知りたかったということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
「1TB」のHDDに日本語は何字入...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
ビットスワップとバイトスワッ...
-
char str[256]の256の意味は?
-
【VB2005】テキストボックス内...
-
ピクセル,dpiから容量(バイト...
-
バイト列とバイナリ列の違いが...
-
:(コロン)のKeyCode
-
[VBScript][wsh]byte単位でのデ...
-
SJIS漢字1バイト目欠落の原因...
-
COBOL PICTUREで X,S,Vの意味
-
Excel VBA で Oracle CLOB型カ...
-
質問です。
-
GetWindowTextでアドレスバーか...
-
この関数はどのプログラミング...
-
UCS-2の一覧表が欲しい
-
ラベル表示の桁をそろえたいです。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
「1TB」のHDDに日本語は何字入...
-
バイナリとBCDコード
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
バイト列とバイナリ列の違いが...
-
SQLで1バイト、2バイト混在...
-
【VB2005】テキストボックス内...
-
Javaで日本語1文字のバイト数
-
3バイト文字(UTF-8)をprintfで...
-
1KBが1024byteな理由
-
C++ Builderで文字列をバイトに...
-
機種依存文字をチェックしたい。
-
半角、全角の判別方法
-
文字コードの利点・欠点について
-
64bit対応
おすすめ情報