Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在关键字之间选择文本_Vb.net_Text Extraction - Fatal编程技术网

Vb.net 在关键字之间选择文本

Vb.net 在关键字之间选择文本,vb.net,text-extraction,Vb.net,Text Extraction,这是我的后续问题 我有一个SGM文档,其中添加了注释,并在我的SGM文件中添加了注释。我需要提取开始/停止注释之间的字符串,以便将它们放在临时文件中进行修改。现在它正在选择所有内容,包括开始/停止注释和开始/停止注释之外的数据 Dim DirFolder As String=txtDirectory.Text Dim目录作为新IO.DirectoryInfo(目录文件夹) 将所有文件作为IO.FileInfo()=Directory.GetFiles(“*.sgm”)进行调整 将单个文件设置为I

这是我的后续问题

我有一个SGM文档,其中添加了注释,并在我的SGM文件中添加了注释。我需要提取开始/停止注释之间的字符串,以便将它们放在临时文件中进行修改。现在它正在选择所有内容,包括开始/停止注释和开始/停止注释之外的数据

Dim DirFolder As String=txtDirectory.Text
Dim目录作为新IO.DirectoryInfo(目录文件夹)
将所有文件作为IO.FileInfo()=Directory.GetFiles(“*.sgm”)进行调整
将单个文件设置为IO.FileInfo
作为字符串的Dim前缀
将newMasterFilePath设置为字符串
将主文件名设置为字符串
将newMasterFileName设置为字符串
Dim startMark As String=“”
将停止标记变暗为字符串=“”
searchDir=txtDirectory.Text
前缀=txtBxUnique.Text
对于所有文件中的每个单个文件
如果File.Exists(singleFile.FullName)则
Dim fileName=singleFile.FullName
Debug.Print(“文件名:”&fileName)
“首先是备份
Dim备份为字符串=fileName&“.bak”
File.Copy(文件名、备份、True)
'从内存中的源文件加载行
Dim lines()作为字符串=File.ReadAllLines(备份)
'现在重新创建源文件并开始在块内写入行
'计算文件中的所有行。
'将insideBlock设置为false
Dim insideBlock作为布尔值=False
将sw用作StreamWriter=File.CreateText(备份)
将每一行作为行中的字符串
如果行=开始标记,则
'从下面的行开始书写
insideBlock=True
'评估下一行是否为
ElseIf行=停止标记,然后
“别写了
insideBlock=False
ElseIf insideBlock=则为真
'在块中写入当前行
西南写入线(行)
如果结束
下一个
终端使用
如果结束
下一个
这是要测试的示例文本

<chapter id="Chapter_Overview"> <?Pub Lcl _divid="500" _parentid="0"> 
<title>Learning how to gather data</title>
<!--#start#-->
<section>
<title>ALTERNATE MISSION EQUIPMENT</title>
<para0 verdate="18 Jan 2019" verstatus="ver">
<title>
<applicabil applicref="xxx">
</applicabil>Three-Button Trackball Mouse</title>
<para>This is the example to grab all text between start and stop comments. 
</para></para0>
</section>
<!--#stop#-->

您可以读取整个文件,并使用
{“”}
的字符串数组将其拆分为一个数组,然后将其拆分为

  • 元素0:在
    之前的文本
  • 元素1:介于
  • 元素2:《代码》之后的文本
以元素1为例。然后将其写入备份

Dim text = File.ReadAllText(backup).Split({startMark, stopMark}, StringSplitOptions.RemoveEmptyEntries)(1)
Using sw As StreamWriter = File.CreateText(backup)
    sw.Write(text)
End Using
编辑以处理评论

我确实使原始代码有点紧凑。它可以扩展为以下内容,允许您添加一些验证

Dim text = File.ReadAllText(backup)
Dim split = text.Split({startMark, stopMark}, StringSplitOptions.RemoveEmptyEntries)
If split.Count() <> 3 Then Throw New Exception("File didn't contain one or more delimiters.")
text = split(1)
Using sw As StreamWriter = File.CreateText(backup)
    sw.Write(text)
End Using
Dim text=File.ReadAllText(备份)
Dim split=text.split({startMark,stopMark},StringSplitOptions.removemptyEntries)
如果split.Count()为3,则抛出新异常(“文件未包含一个或多个分隔符”)
文本=拆分(1)
将sw用作StreamWriter=File.CreateText(备份)
软件写入(文本)
终端使用

您可以读取整个文件,并使用
{“,”}
的字符串数组将其拆分为一个数组,然后将其拆分为

  • 元素0:在
    之前的文本
  • 元素1:介于
  • 元素2:《代码》之后的文本
以元素1为例。然后将其写入备份

Dim text = File.ReadAllText(backup).Split({startMark, stopMark}, StringSplitOptions.RemoveEmptyEntries)(1)
Using sw As StreamWriter = File.CreateText(backup)
    sw.Write(text)
End Using
编辑以处理评论

我确实使原始代码有点紧凑。它可以扩展为以下内容,允许您添加一些验证

Dim text = File.ReadAllText(backup)
Dim split = text.Split({startMark, stopMark}, StringSplitOptions.RemoveEmptyEntries)
If split.Count() <> 3 Then Throw New Exception("File didn't contain one or more delimiters.")
text = split(1)
Using sw As StreamWriter = File.CreateText(backup)
    sw.Write(text)
End Using
Dim text=File.ReadAllText(备份)
Dim split=text.split({startMark,stopMark},StringSplitOptions.removemptyEntries)
如果split.Count()为3,则抛出新异常(“文件未包含一个或多个分隔符”)
文本=拆分(1)
将sw用作StreamWriter=File.CreateText(备份)
软件写入(文本)
终端使用

如果它选择了所有内容,那么您的测试行=开始标记可能永远不匹配。您是否仔细比较过“行”以查看它是否包含任何非打印字符?或者试试line.StartsWith(startMark)?这是该行上唯一的文本。实际上,这是他们自己的事。如果我能得到从结尾到开头的位置,这就是我所需要的。如果这是一个SGML文档(看起来像),您可以使用一个现有的解析器来解析SGML/XML/HTML,或者两者都可以作为NuGet包提供。前者在版本1.8.11中作为NuGet软件包提供,而GitHub repo有版本1.8.12,如果它选择了所有可能的内容,那么您的测试行=startMark永远不会匹配。您是否仔细比较过“行”以查看它是否包含任何非打印字符?或者试试line.StartsWith(startMark)?这是该行上唯一的文本。实际上,这是他们自己的事。如果我能得到从结尾到开头的位置,这就是我所需要的。如果这是一个SGML文档(看起来像),您可以使用一个现有的解析器来解析SGML/XML/HTML,或者两者都可以作为NuGet包提供。前者在版本1.8.11中作为NuGet软件包提供,而GitHub repo在版本1.8.12I中接收到System.IndexOutOfRangeException“索引在数组之外”我将代码Dim insdieBlock替换为布尔值以结束使用,并将代码粘贴到那里。另外,当使用1进行索引时,我使用什么代码来提取元素并将其写入备份索引越界,这意味着没有找到分隔符字符串,因为只返回了一个元素(在这种情况下最多可以使用索引0,对吗?)。您可以在分析分隔符字符串之前检查它是否存在。@MaxineHammett请查看我的编辑。使用扩展代码进行测试。如果它抛出该异常,请中断
抛出新异常
并检查
text
是否包含这两个分隔符。我收到System.IndexOutOfRangeException“索引在数组之外”我将代码Dim insdieBlock替换为布尔值以结束使用并将代码粘贴到那里。还有,我使用什么代码来提取元素并将其写入备份索引中