VB.NET FileOpenしたファイルの内容を文字数を指定して読み込む

タグの編集
投稿者 Yoko  (社会人) 投稿日時 2021/10/5 22:11:29
VB.NETについての質問です。FileOpen(FileNum,"D:\a.txt",OpenMode.Input)で開いたa.txtには50文字の文字列を記述しています。このa.txtの内容を先頭から40文字、Input関数で読みだそうとしたら構文エラー(式は値を生成しません)が発生します。
構文は b = Input(40,FileNum)と記述しています(bは文字型で宣言しています)。VB6.0では出来たのですがVB.NETではシーケンシャルファイルの指定文字数の読出しは出来ないのでしょうか??よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/6 03:25:37
> このa.txtの内容を先頭から40文字
Imports System.IO
Imports System.Text
Module Module1
    Sub Main()
        Dim all As String = File.ReadAllText("D:\a.txt", Encoding.Default)
        Dim s As String = all.Substring(40)
        MsgBox(s)
    End Sub
End Module


> 構文エラー(式は値を生成しません)が発生します。
Function と間違えて、Sub なメソッドの戻り値を受け取ろうとしてはいませんか?
たとえば下記のように呼び出した場合、「BC30491:式は値を生成しません。」のエラーとなります。
Dim r = FileOpen(FileNum,"D:\a.txt",OpenMode.Input)


> 構文は b = Input(40,FileNum)と記述しています(bは文字型で宣言しています)
文字型(Dim b As Char)は、1 文字のみを扱う型ですので、今回は
文字列型(Dim b As String) を使うべきですね。

> シーケンシャルファイルの指定文字数の読出しは出来ないのでしょうか??
できますよ。

ただ、VB6 互換命令である FileOpen / FileClose を使う方法よりも、
.NET らしく、System.IO.File を使う方法をお奨めしておきます。

たとえばデータを一行ずつ読み込む場合、従来の Line Input # ステートメントに相当する
LineInput メソッドを利用することができますが、現在はそれを使うよりも、
File.ReadAllLines メソッドあるいは File.ReadLines メソッドを用いる方が扱いやすいと思います。
(あるいは、FileStream を使うとか)