Vb.net 从文本加载特定数据并放入datagridview
我是一个新的程序员,我正在尝试创建一个小程序,它将帮助我完成很多事情 看起来怎么样 以下是文本文件数据的格式:Vb.net 从文本加载特定数据并放入datagridview,vb.net,text,datagridview,load,Vb.net,Text,Datagridview,Load,我是一个新的程序员,我正在尝试创建一个小程序,它将帮助我完成很多事情 看起来怎么样 以下是文本文件数据的格式: **;======================= Start** (item (name 256) (Index 1) (Image "Wea001") (Action 1 1) (class weapon sword) (code 1 1 1 1) (country 2) (level 1) (wear 1)
**;======================= Start**
(item (name 256) (Index 1) (Image "Wea001") (Action 1 1) (class
weapon sword) (code 1 1 1 1) (country 2) (level 1) (wear
1) (limit Knight 1) (range 16) (buy 4) (sell 1) (endurance
4) (specialty (aspeed 700) (Attack 3 10) (hit 15) ) )
**;======================== end**
我需要导入(名称旁的数字)、(索引旁的数字)和(图像旁的名称)
用户将从打开的文件对话框加载文本文件,3列将显示我请求帮助的3个字段
有人能给我演示一下将文本文件加载到datagridview中的代码示例吗?我正在使用vb.net这里有一种使用现有格式的方法。它使用一个datatable来包含数据,然后将其用作datagridview的数据源。它搜索正确的行,然后用右括号拆分该行。),然后通过按空格拆分每个片段来提取数据
Imports System.IO
Public Class Form1
Dim dt As New DataTable
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim sr As New StreamReader("InitItem.txt")
Dim DataString As String = ""
Dim ImageIndex As Integer = 2
dt.Columns.AddRange({New DataColumn("Name"), New DataColumn("Index"), New DataColumn("Image")})
While Not sr.EndOfStream
DataString = sr.ReadLine
If DataString.Contains("(item") Then
Dim ParseData() As String = DataString.Split(")"c)
If (ParseData(ImageIndex).Contains("desc")) Then
ImageIndex = 3
End If
AddNewRow(ParseData, ImageIndex)
End If
End While
DataGridView1.DataSource = dt
End Sub
Private Sub AddNewRow(ParseData() As String, ImageIndex As Integer)
Dim TempRow As DataRow = dt.NewRow
TempRow.ItemArray = {ParseData(0).Trim.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(1), _
ParseData(1).Trim.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(1), _
ParseData(ImageIndex).Trim.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)(1).Trim(""""c)}
dt.Rows.Add(TempRow)
End Sub
End Class
通过)
进行拆分可以确保当我们在按空格拆分后要提取数据时,字符串不会在末尾附加)
因为文本文件格式到处都是,我专门为您请求的数据编写了这段代码。如果你想要更通用的东西,那么,正如已经提到的,你应该考虑一个更标准的文件格式。由于似乎没有太多数据,我建议在每一行上都有一个字段/值对。name 256。。表示文本大小=256。。攻击3-10怎么样?如果你能控制文件的格式,我强烈建议你设计一种更好的格式,因为解析这种格式可能非常困难。也许是CSV格式,或者JSON(它看起来有点像穷人版的JSON,但我对JSON还不太熟悉,所以不能百分之百肯定地说出来)。首先,我想说的是,非常感谢您提供了这么好、快速的答案和代码。第二,我尝试了这段代码,但得到了干净的datagrid视图:(你能告诉我为什么没有数据吗?!第三,我接受你或其他任何人的任何编辑或特殊想法,但只有文本扩展名。再次感谢管理员的帮助和编辑我的第一篇文章。你添加了列吗?文本文件的格式与你显示的完全一样吗?在
dt.Row设置断点s、 添加(临时行)
并查看TempRow中有哪些数据以及ParseData中有哪些数据。您可能需要在TempRow.ItemArray语句中尝试不同的索引以获得正确的数据。我的代码已使用您显示的示例进行了测试。如果实际格式有任何差异,您必须相应地调整代码。您好,这是数据文件的副本你不是要求它的文本文件,并包含所有数据,我试图为它创建程序,你可以从这里下载我修改了我的代码。你没有得到任何数据的原因是文本文件的格式与你的样本不完全相同。我修复了这一点,我还注意到一些其他问题,你的文本文件的格式部分改变了。它从name,index,image,desc到name,index,desc,image。我添加了代码来实现这一点,这样你就可以在每行的第三列中获得图像。非常感谢新代码,它工作正常,现在显示数据,是的,因为每行表示1个项目,每个项目都有特殊的图像和特殊的细节,这就是为什么不是所有项目都一样我有小的项目东西图像必须显示为图像,所以我们可以给程序指定加载图像的方向,而不是图像列中的图像名称吗?!例如,当用户单击它时,我们添加1个按钮消息显示请选择加载图像的方向,然后他选择文件调用,例如“A”当他选择这个文件程序时,用方向图替换图像列?!非常感谢你的好意