tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル2バイトの一文字読込
記事No4570
投稿日: 2006/11/26(Sun) 02:46
投稿者G
VB2005
OS:WinXPpro sp2

下記のプログラムを使い2バイトと1バイトの混合のテキストファイルを読み込みたいのですが、2バイト文字を読み込むことが出来ません。
エンコードをすべて変えてみましたが無理でした。

プログラムが悪いのかと思いましたが、1行読み込み(下記2行)に変えると正常に読み込んでくれます。

Dim ss As String

ss = tr.ReadLine



c の変数の中に "あ" に該当する数値が入ってくれないのです。



    Private Sub myFileLoad()
        ' テキストボックスにファイル内容を読込
        Dim tr As System.IO.TextReader ' 一文字ずつ読み込む
        Dim c As Integer

        Try ' ファイルから全内容を読み込む
            tr = My.Computer.FileSystem.OpenTextFileReader(myFile, System.Text.Encoding.UTF8)
            c = tr.Read
            Stop
            Do While c <> -1 ' ファイル終了(-1)になるまでくりかえす(真の間くりかえす)
                TextBox1.AppendText(Chr(Asc(c))) ' 文字コード(ASCIIコードまたは、シフトJISコード)に対応する文字を TextBox1 に返す
                c = tr.Read ' 一文字読み込む
            Loop
            tr.Close()
        Catch ex As Exception ' エラーのときはここにくる
            MsgBox("読込エラーです。")
        End Try
    End Sub




よろしくお願いします。

[ツリー表示へ]
タイトルRe: 2バイトの一文字読込
記事No4571
投稿日: 2006/11/26(Sun) 07:41
投稿者花ちゃん
StreamReader.Read メソッド ()  のヘルプにサンプルが記載されていますよ。

http://msdn2.microsoft.com/ja-jp/library/ath1fht8(VS.80).aspx

[ツリー表示へ]
タイトルRe^2: 2バイトの一文字読込
記事No4573
投稿日: 2006/11/26(Sun) 15:38
投稿者G
> StreamReader.Read メソッド ()  のヘルプにサンプルが記載されていますよ。
>
> http://msdn2.microsoft.com/ja-jp/library/ath1fht8(VS.80).aspx

Do While sr.Peek() >= 0
    Console.WriteLine("{0:D}", FirstChar)
    FirstChar = sr.Read
Loop
sr.Close()

これだと10進数で表示してくれましたが、2バイト文字を表示してくれません。
サンプルのどこを見たら2バイトを表示してくれる場所が掲示してあるのでしょうか。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^3: 2バイトの一文字読込
記事No4574
投稿日: 2006/11/26(Sun) 15:59
投稿者花ちゃん
> Do While sr.Peek() >= 0
>     Console.WriteLine("{0:D}", FirstChar)
>     FirstChar = sr.Read
> Loop
> sr.Close()
> これだと10進数で表示してくれましたが、2バイト文字を表示してくれません。
> サンプルのどこを見たら2バイトを表示してくれる場所が掲示してあるのでしょうか。

自分で勝手にサンプルを書き直したらまともに動く物も動かなくなるのでは。

どこも変更しないで下記を試して見て下さい。

Private Sub Button1_Click(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles Button1.Click
        Dim path As String = "c:\MyTest.txt"
        Try
            If File.Exists(path) Then
                File.Delete(path)
            End If

            Dim sw As StreamWriter = New StreamWriter(path)
            sw.WriteLine("あいABCDうえお")
            sw.WriteLine("testあいうえおtest")
            sw.Close()

            Dim sr As StreamReader = New StreamReader(path)

            Do While sr.Peek() >= 0
                Console.WriteLine(Convert.ToChar(sr.Read()))
            Loop
            sr.Close()
        Catch ex As Exception
            Console.Write("The process failed: {0}", ex.ToString())
        End Try

End Sub

[ツリー表示へ]
タイトルRe^4: 2バイトの一文字読込
記事No4575
投稿日: 2006/11/26(Sun) 17:50
投稿者G
> 自分で勝手にサンプルを書き直したらまともに動く物も動かなくなるのでは。
>
> どこも変更しないで下記を試して見て下さい。


このプログラムで動くことが確認されましたが、どこをいじれば既存のファイル(2バイト文字)で一文字ずつ読み込むことが出来るようになりますか。

それともプログラム側で作成したファイルは一文字ずつ読み込むことが出来ますが、既存のファイルでは無理だということでしょうか。

ありがとうございました。

[ツリー表示へ]
タイトルRe^5: 2バイトの一文字読込
記事No4576
投稿日: 2006/11/26(Sun) 19:38
投稿者花ちゃん
ここのサンプル等も参考にしてチャンと試して見て下さい。

Private Sub Button1_Click(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) Handles Button1.Click
   Dim sr As New System.IO.StreamReader("c:\Test.txt", System.Text.Encoding.Default)
   'Dim sr As StreamReader = New StreamReader("c:\Test.txt")

   Do While sr.Peek() >= 0
       Console.WriteLine(Convert.ToChar(sr.Read()))
   Loop
   sr.Close()
End Sub

※ c:\Test.txt ファイルは、メモ帳で作成して保存した物を使用して下さい。

[ツリー表示へ]
タイトルRe^6: 2バイトの一文字読込
記事No4577
投稿日: 2006/11/26(Sun) 21:09
投稿者G
> ここのサンプル等も参考にしてチャンと試して見て下さい。

感動です。

できました。

それだけでは駄目だということですね。

今日も全然出来なくて諦めようと思っていました。

ありがとうございます。

[ツリー表示へ]