vb2008より、ファイル読み込み書き込みの際に発生する文字化けについて
初めて投稿させて頂くkuro_sanと申します。どうぞよろしくお願いします。
現在visual basic 2008を用いてプログラムを作成しているのですが、データの読み込み、書き込みを行う箇所で問題が発生したために、行き詰まっております。
コードを以下に示させて頂きます。
[書き込み処理関数]
Private Sub WriteLog(ByVal FileName As String)
'File Open
Dim Writer As New IO.StreamWriter(FileName, True)
'書き込み処理
For i As Integer = 0 To i
Writer.WriteLine(Table(0, i) & "," & Table(1, i) & "," & Table(2, i))
Next
Writer.Close()
End Sub
[読み込み処理関数]
Private Sub Readlog(ByVal FileName As String)
Dim Reader As New IO.StreamReader(FileName, System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim Items() As String = New String() {}
Dim Line As String = Reader.ReadLine 'CSVの一行
'データの読み込み
i = 0
Do Until IsNothing(Line)
Items = Line.Split(",")
i += 1
Table(0, i) = Items(0).ToString
Table(1, i) = Items(1).ToString
Table(2, i) = Val(Items(2))
Line = Reader.ReadLine
Loop
End Sub
です。
書き込みはtext形式の物に行っています。Table配列には(0,i),(1,i)にはString型の文字が、(2,i)には数字が入力されています。
入力、出力は行うことが出来るのですが、(0,i),(1,i)にひらがな、カタカナ、漢字などの文字が使われていると、読み込みを行った際に文字化けして格納されてしまいます。
(例:くろ,kuro,1 → 縺上m,kuro,1)
出力されたtextの中では文字化けが起こっていませんが、形式を直接csvに変換したり、読み込みを行った際に文字化けが発生している事から、書き込み時に問題があるのではないか、と思い調べているのですが、原因を判明できていません。
文字化けを発生させずに読み込み、書き込み処理を行う方法をご存知である方がいらっしゃればご教授頂けますと幸いです。
お礼
やはり無理なんですね。 これからAccess、SQLSever、どれに接続するかはまだ決まってませんが、ファイル処理の理解もかねて今のところテキストファイルでデータベースの登録、更新、削除などをやってます。 Input,Output,Appendモードをつかったシーケンシャルアクセスや構造体をつかったランダムアクセスもやりました。では文字列でランダムアクセスをやったらどうなるかを考えてみました。 ヘルプを見ると可変長文字列は2バイトの制御コードがつくと書かれていたので多分"■ "はそれだろうと思っていました。 レコード長だったんですね。 ありがとうございました。 ちなみに、あまりダラダラ書きたくなかったので省略しましたが、文字列をレコードの長さに合わせる関数はStrConv(str,vbFromUniCodo)で文字コードを変換してからMidB(str,1,Nagasa)で切り取りStrConv(str,vbUniCodo)で戻して最後の文字がvbNullCharだったらスペースを埋めるという処理をしています。