我正在开发一个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
这不是我真正需要的。
有什么想法吗?
如果您需要更多信息,请与我们联系。
编辑:作为一个补充说明,我相信多维数组是我正在寻找的,我现在正在查找它们,但如果您有关于这些的更多信息,我将非常感激。
答案 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
。
如果您仍然需要多维数组,我建议使用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