vb.NET数组 - 将字符串转换为表格

时间:2013-04-16 22:37:09

标签: arrays vb.net winforms visual-studio

我正在开发一个Windows窗体应用程序,我让它读取一个文件文件,其中包含以表格形式存储的信息。看起来有点像这样:

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

依旧...... 我需要做的是从流读取器中读取这些数据,将其抛出到一个字符串中,包括vbtabs和换行符,然后从该信息中创建一个数组,这样它就可以作为一个表,然后我可以之后根据列名(即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 个答案:

答案 0 :(得分: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了,但这里是C#,可以通过转换器来运行VB.NET。我也是使用List做的,如果你最后需要一个数组:

lines.ToArray();

答案 1 :(得分:0)

这是rclements代码 转换为VB

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

答案 2 :(得分:0)

您正在尝试模拟CSV -> DataTable工作流,其中vbTab是您的CSV分隔符,DataTable是您的存储结构(您可以按字段名称和行索引查询)。互联网上有很多解决方案,只需谷歌CSV to DataTable

以下是one,链接自here(SO回答)。

如果您仍然需要多维数组,我建议使用List(Of String())而不是String(,),因为您需要管理内存分配。每行数据都是List的元素和单维数组,其中列值是数组元素0-N

要从文件中读取,您可以使用IO.File.ReadAllLines

答案 3 :(得分: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