VB6.0でStreamReaderを使用する方法

このQ&Aのポイント
  • VB6.0でStreamReaderを使用するには、コード修正が必要です。
  • Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", System.Text.Encoding.GetEncoding("Shift-JIS"))の行でエラーが発生しています。
  • エラーを修正するには、ファイルパスを正しく指定し、エンコーディングを適切に設定する必要があります。
回答を見る
  • ベストアンサー

VB6.0にてStreamReaderを使用したいのですが、

VB6.0にてStreamReaderを使用したいのですが、 Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", のコードが赤字でエラーになります。 どう修正すればよろしいでしょうか? ご存知の方教えてください。よろしくお願いします。 Dim strTemp As String Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) strTemp = Reader.ReadToEnd msgobox strTemp Reader.Close

  • ddtqp
  • お礼率68% (139/203)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

VB6.0ではそのようなクラスはありません。 (VB.NETのコードは使えない。同じではない。) Shift_JISコードのテキストを読み込むだけであれば、 VB6にある Open Input Close らで十分だし、 FileSystemObjectのOpenTextFile でもできるし、 ADODB.Streamでもできます。

ddtqp
質問者

お礼

回答ありがとうございます。 VB6.0に、StreamReaderはないのですね。 >VB6にある Open Input Close らで十分だし、 >FileSystemObjectのOpenTextFile でもできるし、 >ADODB.Streamでもできます。 csvファイルが2ギガ程度あり、上記のものでは読み込めませんでした。 Input早いようですね。 http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200911/09110054.txt でメモリ問題を解消したのですが、20分経っても開けませんでした。 もうちょっと考えてみます。

ddtqp
質問者

補足

すみません。 とりあえずアクセスで20分程で開けたので、仮対応できました。

その他の回答 (1)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

もしC言語のプログラムコードを、VBにそのままコピペして『動かない!!どうすれば!!』って騒いでいる人がいたら、『何言ってんの?当たり前じゃん』って思うでしょう。 VB6以前と、VB6より後(VB.NET以降)に関しても、同じようなものです。 名前はVBとついていますが、技術基盤が違うために、それほどの差異が生じています。 関数名や言語構造を引き継いで、一見似ている為にタチが悪いですが。 とりあえず、Openをヘルプで引くことをお奨めします。

ddtqp
質問者

お礼

回答ありがとうございます。 Open系いろいろと調べましたが、 VB6.0では重すぎるファイルは開けないようです。 アクセスで開いたので、仮対応できました。

関連するQ&A

  • インスタンス化について

    .NETでのインスタンス化について .NETでプログラムの勉強をしています。インスタンスについてお教えください。 ↓では、「sr」はnewキーワードを使ってインスタンス化しています。 ********************************************************************************** //"C:\test.txt"をShift-JISコードとして開く System.IO.StreamReader sr = new System.IO.StreamReader( @"C:\test.txt", System.Text.Encoding.GetEncoding("shift_jis")); //内容をすべて読み込む string s = sr.ReadToEnd(); //閉じる sr.Close(); //結果を出力する Console.WriteLine(s); ↓では、「enc」はnewキーワードを使ってインスタンス化していません。 ********************************************************************************** //読み込むテキストファイル string textFile = "C:\\text.txt"; //文字コード(ここでは、Shift JIS) System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); //テキストファイルの中身をすべて読み込む string str = System.IO.File.ReadAllText(textFile, enc); //行ごとの配列として、テキストファイルの中身をすべて読み込む string[] lines = System.IO.File.ReadAllLines(textFile, enc); ********************************************************************************** 質問1: インスタンス化させる時にはnewキーワードが必要だと思っていましたが、「enc」はnewキーワードが使用されていません。 なぜでしょうか? 質問2: System.IO.StreamReader sr = new System.IO.StreamReader( @"C:\test.txt", System.Text.Encoding.GetEncoding("shift_jis")); 上記のように、newと同時にパスやエンコーディングを引数として渡しています。この事をコンストラクタとよぶのでしょうか? Googleで調べていますが、いまいち意味がわかりません・・・物凄くひらたくいうとどういったことなのでしょうか?何かプログラムではない、一般的な事で例えて頂けるとありがたいです。 宜しくお願い致します。

  • VBのテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • C#におけるファイル読み取りの文字化け

    開発初心者です。 //Shift-JISコードとして開く System.IO.StreamReader sr = new System.IO.StreamReader(@txtShiteiFile.Text, System.Text.Encoding.GetEncoding(932)); //内容を全て読み込む string textAll = sr.ReadToEnd(); 以上の関数を使ってテキストファイル上の文字を読み取りしているのですが、 textAll 変数に入ったときに文字化けしています。 また、テキストファイルによっては文字化けしないときもあります。 この場合、どのような対処をすればよいのでしょうか?

  • VB TEXT読み取りについて

    このコードでのデバックは成功したのですが、TEXTBOX1にファイルネーム C:\Users\???\Documents\???と入力しても’パスが拒否されました’と出てしまいます。 どう解決したらよいのでしょうか、宜しくお願いします。 Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sr As System.IO.StreamReader = Nothing Try Dim file As String = TextBox1.Text sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim doc As String = "" Do Until sr.EndOfStream doc &= sr.ReadLine & vdcrlf() Loop TextBox2.Text = doc Catch ex As Exception MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If End Try End Sub Private Function vdcrlf() As String Throw New NotImplementedException End Function End Class

  • VB2008

    VB初心者です、よろしくお願いいたします。 現在、VB2008を使い、顧客名簿を作成しています。 前回の質問で、テキストファイルのファイル名だけを取得する方法は分かったのですが、そのファイルの内容をテキストボックスに表示する方法がうまくいきません。 ファイルの内容は 1行目→名前 2行目→メールアドレス 3行目→郵便番号 4行目→住所 5行目→購入した商品 をそれぞれ、textbox1~5に表示させたいと思っています。 書籍などで調べた結果 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim totalcount As Integer Dim oneline As String Dim sr As System.IO.StreamReader sr = New System.IO.StreamReader("C:hogehoge\" & ComboBox1.Text & ".txt") oneline = sr.ReadLine() sr.Close() Dim skipline As Integer Dim r As Random = New Random() skipline = r.Next(totalcount) sr = New System.IO.StreamReader("C:hogehoge\" & ComboBox1.Text & ".txt") Dim i As Integer = 0 Do While i < skipline sr.ReadLine() i += 1 Loop oneline = sr.ReadLine() sr.Close() TextBox1.Text = oneline TextBox2.Text = (skipline + 1).ToString() End Sub このような記述になりました。 textbox1には問題なく名前が表示されますが、textbox2には"1"と表示されてしまいます。 すみませんが、修正箇所を教えていただけませんか? よろしくお願いいたします。

  • C#での文字置換について

    hoge.txt -------------- #abc_1 111111111 222222222 333333333 #abc_2 111111111 222222222 333333333 #abc_3 ... -------------- StreamReader sr = new StreamReader("hoge.txt", Encoding.GetEncoding("UTF-8")); sr.ReadToEnd(); でファイルを読み込み#abc_1から#abc_2の間の 111... 222... 333... というのを削除して 出力したいのですが分かりません。 (同様に#abc_2から#abc_3の間も削除します) つまり出力は #abc_1 #abc_2 #abc_3 となるように。 宜しくお願いします

  • VB2008 txtファイル保存

    こんにちは、Vb2008を勉強しています。 デスクトップに保存している、TXTファイルに、 フォームで入力したデータを追加保存したいと思い、ネットで調べたり…で 入力しましたが、txtファイルを開いてみると文字化けしてしまします。 Dim writer As System.IO.FileStream = _ System.IO.File.OpenWrite("C:\Users\Desktop\顧客管理.txt") 'SystemWriterオブジェクトを作成し、テキストデータが書き込めるようにする Dim sw As System.IO.StreamWriter = New System.IO.StreamWriter(writer) 'ファイルの末尾に移動する sw.BaseStream.Seek(0, System.IO.SeekOrigin.End) 'データを書き込む sw.WriteLine(TextBox1.Text & "," & TextBox2.Text & "," & TextBox3.Text) 'ファイルを更新する sw.Flush() 'ファイルを閉じる sw.Close() writer.Close() 上記の方法で文字化けだったので、またまた、調べて入力しましたが 今度は、改行されず…単純な、データの追加のようになってしまっています。 私は、新しい行に追加できるようにしたいです。 下のコードは文字コードの指定をしたので、保存はできますが、 改行されません。 Dim FileName As String = "C:\Users\Desktop\確認.txt" Dim Writer As IO.StreamWriter Dim Encode As System.Text.Encoding '文字コードにShiftJISを指定。 Encode = System.Text.Encoding.GetEncoding("Shift-JIS") '既に存在するテキストに追加する場合は第2引数をTrueにする。 Writer = New IO.StreamWriter(FileName, True, Encode) Writer.Write(TextBox1.Text & "," & TextBox2.Text) Writer.Close() どなたか、教えていただけませんでしょうか?

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

  • C#で空白行を削除する方法

    C#でテキストを読み込んで、文字列型の変数に代入、そしてtextBoxに表示させます。その中にいくつかの空白だけの行があります。その空白行だけを削除する方法がわかりません。わかる方がいらっしゃいましたらよろしくお願いします。 FileStream file = File.Open(@"C:\text.txt",FileMode.Open); Encoding enc = Encoding.GetEncoding("Shift_JIS"); StreamReader reader = new StreamReader(file,enc); string A = reader.ReadToEnd(); A = Regex.Replace(A,"\r\n",""); textBox1.Text = A; とすると全ての改行が削除されてしまいます。 正規表現をうまくつかうと出来るような気がするんですが・・・

専門家に質問してみよう