テキストファイルの内容をタブを取り除いて配列に格納する

タグの編集
投稿者 nal  (社会人) 投稿日時 2021/10/6 17:09:39
読み出すテキストファイルの中身が
TABTAB100TAB200改行
TABTAB100TAB200改行

のとき、
配列(1) = 100
配列(2) = 200
配列(3) = 100
配列(4) = 200
と格納したいんですが、どうしたら良いでしょうか?

言語はvb.netです。よろしくお願いします!
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/6 17:52:05
> 配列(1) = 100
> 配列(2) = 200
> 配列(3) = 100
> 配列(4) = 200

配列(0) は?

Imports System.IO
Module Module1
    Sub Main()
        Dim result As New List(Of String)() From {"配列(0)の値"}
        For Each cols In File.ReadLines("D:\example.txt").Select(Function(s) s.Split(vbTab(0)))
            If cols.Length = 4 Then
                result.Add(cols(2))
                result.Add(cols(3))
            End If
        Next
        Dim 配列() As String = result.ToArray()

    End Sub
End Module
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/6 17:56:05
ループを使わずに 1 行にまとめた場合

Dim 配列 = "".Split().Concat(File.ReadLines("D:\example.txt").SelectMany(Function(s) s.Split(vbTab(0)).Skip(2).Take(2).ToArray())).ToArray()
投稿者 nal  (社会人) 投稿日時 2021/10/8 09:42:36
魔界の仮面弁士 様

ありがとうございました!解決しました。
投稿者 nal  (社会人) 投稿日時 2021/10/26 17:39:06
魔界の仮面弁士様

申し訳ありません、再び質問があります。以前の回答頂いた(1行)でまとめた場合のコードで実践しています。Dimで宣言したローカルの配列にテキストを格納後、その配列を他のフォームで、かつdouble型に変換して使用したいのですが上手くいかなく躓いています。

ローカルで宣言した配列(String型)をグローバル変数かつDouble型に変換することはできるのでしょうか?できれば、回答いただいた1行にまとめた方のコードでやりたいです。

宜しくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2021/10/26 20:45:32
Double 型の配列とするのであれば、こうですね。

代入先の変数は、ローカル変数でも良いですし、
Form1 上のフィールド変数でも良いですし、
Module1 上のグローバル変数でも構いません。

Dim doubleArray As Double() = File.ReadLines("D:\example.txt").SelectMany(Function(s) s.Split(ControlChars.Tab).Skip(2).Take(2).Select(AddressOf Convert.ToDouble).ToArray()).ToArray()



あるいは、Form1 で扱っている変数を Form2 に受け渡すような目的であれば、
相手のフォームにメソッドを用意し、そこに引数として渡すといった方法を採れます。
メソッドの代わりに、プロパティやコンストラクタ引数で渡しても OK。

Public Class Form2
  Private data As Double() = {} 
  Public Sub LoadValues(d As Double())
    data = d
    ListBox1.DataSource = data
  End Sub
End Class


Public Class Form1
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim 配列1 As Double() = {100R, 200.0, 100.0#, 200}
    Dim f As New Form2()
    f.LoadValues(配列1)
    f.Show(Me)
  End Sub
  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim 配列1 As Double() = {10.0R, 20.0, 10.0#, 20}
    Using f As New Form2()
      f.LoadValues(配列1)
      f.ShowDialog(Me)
    End Using
  End Sub
End Class
投稿者 nal  (社会人) 投稿日時 2021/10/29 10:16:08
魔界の弁士様

回答ありがとうございます。

頂いたやり方でdouble型へ変換し、その後その配列をグローバル変数へ代入することで解決できました!