VB 抓取文本值并保存为变量
VB grab text values and save as variables
我想知道是否有更快的方法来 "search" 一行文本字符串的一部分并找到非静态值并将它们保存到变量中?
例如,我不能真正使用 Substring 来搜索一行的一部分,因为“ ”中的值的长度永远不会相同。
我正在阅读的文本文件的示例部分:
<I_Sect IDCode="20001" Description="This is desc" Quantity="1000" InclKind="Inc" />
ID 名称:IDCode Description Quantity and InclKind
永远不会改变
值发生变化:20001 ... This is desc... etc
在我执行子字符串以查找 ID 名称并获取“”之间的字符串有多长之后,是否有更快的方法来搜索“”?
当前代码:
Dim list As New List(Of String)()
Dim file As New System.IO.StreamReader(DisplayFile)
While Not file.EndOfStream
Dim line As String = file.ReadLine()
list.Add(line)
End While
file.Close()
Console.WriteLine("{0} lines read", list.Count)
'RichTextBox1.Text = System.IO.File.ReadAllText(DisplayFile)
For counter As Integer = 0 To list.Count
If list(counter).Substring(0, 7) = "<I_Sect" Then
'Do a substring of the line to see if I can locate Description ID string
' .............
Dim desc As String = ' .... [the valve I grab will be "This is desc"]
End If
Next
使用这个 xml 文件
<?xml version="1.0" encoding="utf-8" ?>
<root>
<I_SecMain>
<I_SecTop>
<I_SecBrac>
<I_Sect IDCode="20001" Description="This is desc 1" Quantity="10001" InclKind="Inc 1" />
<I_Sect IDCode="20002" Description="This is desc 2" Quantity="10002" InclKind="Inc 2" />
<I_Sect IDCode="20003" Description="This is desc 3" Quantity="10003" InclKind="Inc 3" />
<I_Sect IDCode="20004" Description="This is desc 4" Quantity="10004" InclKind="Inc 4" />
<I_Sect IDCode="20005" Description="This is desc 5" Quantity="10005" InclKind="Inc 5" />
</I_SecBrac>
</I_SecTop>
</I_SecMain>
</root>
您可以定义一个相应的模型来反序列化文件。
导入的命名空间
Imports System.Xml.Serialization
型号
<XmlRoot("root")>
Public Class Root
<XmlElement>
Public Property I_SecMain As I_SecMain
End Class
Public Class I_SecMain
<XmlElement>
Public Property I_SecTop As I_SecTop
End Class
Public Class I_SecTop
<XmlElement>
Public Property I_SecBrac As I_SecBrac
End Class
Public Class I_SecBrac
<XmlElement("I_Sect")>
Public Property I_Sects As List(Of I_Sect)
End Class
Public Class I_Sect
<XmlAttribute>
Public Property IDCode As Integer
<XmlAttribute>
Public Property Description As String
<XmlAttribute>
Public Property Quantity As Integer
<XmlAttribute>
Public Property InclKind As String
End Class
并且非常简单地将文件反序列化为强类型对象
Dim DisplayFile = "test.xml"
Dim myRoot As Root
Dim mySerializer As New XmlSerializer(GetType(Root))
Using fs As New FileStream(DisplayFile, FileMode.Open)
myRoot = mySerializer.Deserialize(fs)
End Using
可以迭代。
For Each isect In myRoot.I_SecMain.I_SecTop.I_SecBrac.I_Sects
Console.WriteLine(
String.Format("ID Code: {0}, Description: {1}, Quantity: {2}, InclKind: {3}",
isect.IDCode, isect.Description, isect.Quantity, isect.InclKind))
Next
从这里开始,问题就是准确定义您的模型(您在问题中没有 post 它)并且只是从反序列化对象中检索属性。
使用序列化,如果需要的话,写入文件也很简单。
Using fs As New FileStream(DisplayFile, FileMode.Open)
mySerializer.Serialize(fs, myRoot)
End Using
我想知道是否有更快的方法来 "search" 一行文本字符串的一部分并找到非静态值并将它们保存到变量中?
例如,我不能真正使用 Substring 来搜索一行的一部分,因为“ ”中的值的长度永远不会相同。
我正在阅读的文本文件的示例部分:
<I_Sect IDCode="20001" Description="This is desc" Quantity="1000" InclKind="Inc" />
ID 名称:IDCode Description Quantity and InclKind
永远不会改变
值发生变化:20001 ... This is desc... etc
在我执行子字符串以查找 ID 名称并获取“”之间的字符串有多长之后,是否有更快的方法来搜索“”?
当前代码:
Dim list As New List(Of String)()
Dim file As New System.IO.StreamReader(DisplayFile)
While Not file.EndOfStream
Dim line As String = file.ReadLine()
list.Add(line)
End While
file.Close()
Console.WriteLine("{0} lines read", list.Count)
'RichTextBox1.Text = System.IO.File.ReadAllText(DisplayFile)
For counter As Integer = 0 To list.Count
If list(counter).Substring(0, 7) = "<I_Sect" Then
'Do a substring of the line to see if I can locate Description ID string
' .............
Dim desc As String = ' .... [the valve I grab will be "This is desc"]
End If
Next
使用这个 xml 文件
<?xml version="1.0" encoding="utf-8" ?>
<root>
<I_SecMain>
<I_SecTop>
<I_SecBrac>
<I_Sect IDCode="20001" Description="This is desc 1" Quantity="10001" InclKind="Inc 1" />
<I_Sect IDCode="20002" Description="This is desc 2" Quantity="10002" InclKind="Inc 2" />
<I_Sect IDCode="20003" Description="This is desc 3" Quantity="10003" InclKind="Inc 3" />
<I_Sect IDCode="20004" Description="This is desc 4" Quantity="10004" InclKind="Inc 4" />
<I_Sect IDCode="20005" Description="This is desc 5" Quantity="10005" InclKind="Inc 5" />
</I_SecBrac>
</I_SecTop>
</I_SecMain>
</root>
您可以定义一个相应的模型来反序列化文件。
导入的命名空间
Imports System.Xml.Serialization
型号
<XmlRoot("root")>
Public Class Root
<XmlElement>
Public Property I_SecMain As I_SecMain
End Class
Public Class I_SecMain
<XmlElement>
Public Property I_SecTop As I_SecTop
End Class
Public Class I_SecTop
<XmlElement>
Public Property I_SecBrac As I_SecBrac
End Class
Public Class I_SecBrac
<XmlElement("I_Sect")>
Public Property I_Sects As List(Of I_Sect)
End Class
Public Class I_Sect
<XmlAttribute>
Public Property IDCode As Integer
<XmlAttribute>
Public Property Description As String
<XmlAttribute>
Public Property Quantity As Integer
<XmlAttribute>
Public Property InclKind As String
End Class
并且非常简单地将文件反序列化为强类型对象
Dim DisplayFile = "test.xml"
Dim myRoot As Root
Dim mySerializer As New XmlSerializer(GetType(Root))
Using fs As New FileStream(DisplayFile, FileMode.Open)
myRoot = mySerializer.Deserialize(fs)
End Using
可以迭代。
For Each isect In myRoot.I_SecMain.I_SecTop.I_SecBrac.I_Sects
Console.WriteLine(
String.Format("ID Code: {0}, Description: {1}, Quantity: {2}, InclKind: {3}",
isect.IDCode, isect.Description, isect.Quantity, isect.InclKind))
Next
从这里开始,问题就是准确定义您的模型(您在问题中没有 post 它)并且只是从反序列化对象中检索属性。
使用序列化,如果需要的话,写入文件也很简单。
Using fs As New FileStream(DisplayFile, FileMode.Open)
mySerializer.Serialize(fs, myRoot)
End Using