投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/18 14:38:01
> 元のコードでの「For Each x In q」の x とは、Columns プロパティや RowIndex プロパティを持つ
> 『匿名型』の変数だったのに対して、それを勝手に「Dim X(upperIndex) As Single」に変更したため、
> 『Single 型』の変数に置き換わってしまっています。

少し訂正。
『Single 型』の変数ではなく
『Single() 型』の変数に置き換わっています。

Single 型の一次元配列と言い変える事もできます。


> ・・・・Columns,RowindexはSngleのメンバーではありません.
このエラーメッセージも、
Rowindex ではなく RowIndex のはずですし、
Sngle ではなく Single だったはずですね。

'Columns' は 'Single()' のメンバーではありません。
'RowIndex' は 'Single()' のメンバーではありません。




ひとまず、既定の名前空間だけで動くように見直して、
配列変数名も X / Y / UD1/ UD2 とした Single 配列バージョンに書き直しました。

文字列補間( $ で始まる文字列 ) も使わないようにしているので、
VB2008 以降であればコンパイルが通るかと思います。(2008 が手元に無いので試せませんが)


なおこのように、VB のバージョンによって回答が変わる事は多いので、
質問時には開発環境を明示するようにしましょう。(たとえば、今回のコードを
VB.NET 2002 / VB.NET 2003 / VB2005 に対応させる場合は、もう少しだけ手直しが必要です)


Dim fileName As String = Label2.Text  ' = "C:\test\example.txt" 
Dim enc = System.Text.Encoding.GetEncoding("Shift_JIS")

Dim lines As String() = System.IO.File.ReadAllLines(fileName, enc)

Dim upperIndex As Integer = lines.GetUpperBound(0)
Dim X(upperIndex), Y(upperIndex), UD1(upperIndex), UD2(upperIndex) As Single

Dim splitter As Char() = {ControlChars.Tab, " "c, " "c}
Dim separator = StringSplitOptions.RemoveEmptyEntries
For rowIndex = 0 To upperIndex
    Dim columns As String() = lines(rowIndex).Split(splitter, separator)

    Single.TryParse(columns(0), X(rowIndex))
    Single.TryParse(columns(1), Y(rowIndex))
    Single.TryParse(columns(2), UD1(rowIndex))
    Single.TryParse(columns(3), UD2(rowIndex))
Next rowIndex