0

私は Windows フォーム アプリケーションで作業しており、テーブルの形式で情報が格納されているテキスト ファイルを読み取っています。次のようになります。

ID     Name      URL
1      client1   client1.com
2      client2   client2.com
3      client3   client3.com

などなど...私がする必要があるのは、このデータをストリームリーダーから読み取って、それをvbtabと改行を含む文字列にスローし、その情報から配列を作成して、後で列名 (ID、名前、URL) と ID 番号に基づいて情報を取得できるテーブル。私は配列の経験があまりないので、これを行う方法としてここで助けを得たいと思っていました.

この機能のこれまでのコードは次のとおりです。

Dim readCLientTxtListReader As New StreamReader(strReplicationDataClientAccessListPath)
Dim strClientAccessList As String = readCLientTxtListReader.ReadToEnd

Console.Write(strClientAccessList)
readCLientTxtListReader.Close()

Dim i As Integer
Dim aryClientAccessList() As String

aryClientAccessList = strClientAccessList.Split(vbTab)
For i = 0 To UBound(aryClientAccessList)
    Console.WriteLine(aryClientAccessList)
Next i

これに関する問題は、各 vbtab 間の個々の文字列として配列の新しいインスタンスを作成するだけであることです。つまり、配列は次のようになります。

ID
Name
URL
1
client1
client1.com
2
client2
client2.com
3
client3
client3.com

これは私が本当に必要としているものではありません。

何か案は?

さらに情報が必要な場合は、お知らせください。

編集:追加の補足として、多次元配列は私が探しているものであり、現在探していると思いますが、これらについてさらに情報があれば、大いに感謝します。

4

4 に答える 4

0

私があなたの最終目標を読んでいる方法は、ファイルの各行を含む配列が必要であり、各行はその行のトークンを含む配列でなければならないということです。それが正しければ、次のようなことができます。

var lines = new List<string[]>();
using (var strReplicationDataClientAccessListPath = new FileStream("path", FileMode.Open))
using (var streamReader = new StreamReader(strReplicationDataClientAccessListPath))
{
    while (streamReader.Peek() >= 0)
    {
        var line = streamReader.ReadLine();
        if (!string.IsNullOrEmpty(line))
            lines.Add(line.Split('\t'));
    }
}
foreach (var line in lines)
{
    foreach (var token in line)
        Console.Write(token);
    Console.WriteLine();
}

私は長い間 VB を行っていませんが、VB.NET を取得するためにコンバーターを介して実行できる C# を次に示します。また、リストを使用してそれを行いました。最後に配列が必要な場合は、次のことができます。

lines.ToArray();
于 2013-04-16T22:59:11.963 に答える
0

これは VB に変換された rclements コードです。

Dim lines = New List(Of String())()
Using strReplicationDataClientAccessListPath = New FileStream("path", FileMode.Open)
  Using streamReader = New StreamReader(strReplicationDataClientAccessListPath)
    While streamReader.Peek() >= 0
      Dim line = streamReader.ReadLine()
      If Not String.IsNullOrEmpty(line) Then
        lines.Add(line.Split(ControlChars.Tab))
      End If
    End While
  End Using
End Using
For Each line As var In lines
  For Each token As var In line
    Console.Write(token)
  Next
  Console.WriteLine()
Next
于 2013-04-16T23:01:56.437 に答える
0

それはあなたが必要とするものですか?

    'Read Values from the text file and store in a DataTable
    Dim dt As New DataTable
    Using TextReader As New IO.StreamReader("C:\Data.txt")
        Dim Line As String = TextReader.ReadLine

        If String.IsNullOrEmpty(Line) Then
            MsgBox("No Data")
            Exit Sub
        End If

        With Line.Split(vbTab)
            dt.Columns.Add(.GetValue(0))
            dt.Columns.Add(.GetValue(1))
            dt.Columns.Add(.GetValue(2))
        End With

        Do
            Line = TextReader.ReadLine
            If Line Is Nothing Then Exit Do
            dt.Rows.Add(Line.Split(vbTab))
        Loop
    End Using

    'Print the DataTable header
    For Each Column As DataColumn In dt.Columns
        Console.Write(Column.ColumnName & vbTab)
    Next

    Console.WriteLine(vbCrLf & New String("-", 24))

    'Print the DataTable contents
    For Each Row As DataRow In dt.Rows
        Console.WriteLine(Row("ID") & vbTab & Row("Name") & vbTab & Row("URL"))
    Next

Listあなたがそれよりもそれを好む場合に備えて、私は別の解決策を追加しましたDataTable

    'Read Values from the text file and store in a List of type Tuples
    Dim Values As New List(Of Tuple(Of String, String, String))

    Using TextReader As New IO.StreamReader("C:\Data.txt")
        Dim Line As String = TextReader.ReadLine

        Do Until Line Is Nothing
            With Line.Split(vbTab)
                Values.Add(Tuple.Create(.GetValue(0).ToString, .GetValue(1).ToString, .GetValue(2).ToString))
            End With
            Line = TextReader.ReadLine
        Loop
    End Using

    'Print the List contents
    For Each T As Tuple(Of String, String, String) In Values
        Console.WriteLine(T.Item1 & vbTab & T.Item2 & vbTab & T.Item3)
    Next
于 2014-04-17T22:50:23.047 に答える
0

CSV -> DataTableワークフローをシミュレートしようとしています。ここvbTabで、CSV 区切り文字とDataTableストレージ構造を指定します (フィールド名と行インデックスでクエリを実行できます)。インターネット上には多数のソリューションがありますCSV to DataTable

hereからリンクされている1つです(SO answer)。

それでも多次元配列が必要な場合は、メモリ割り当てを管理する必要がないため、 のList(Of String())代わりにをお勧めします。データの各行は の要素であり、列の値が配列要素である 1 次元配列になります。String(,)List0-N

ファイルから読み取るには、IO.File.ReadAllLinesを使用できます。

于 2013-04-17T11:24:27.217 に答える