如何删除文本文件中指定主题对应的[newsubj]到[endtext]完整块
笔记工具指定主题块删除实现方案
核心逻辑
每个主题对应完整内容块的范围是从[newsubj]标记行开始,到该主题后续第一个[endtext]标记行结束,只要定位到选中主题对应块的起止行号,删除区间内所有内容即可,不受正文行数影响。
实现代码(VB.NET)
Imports System.IO ' 此处ListBox1为你的主题列表框控件名,SelectedIndex默认从0开始计数,选中第一项对应索引0 Dim selectedIndex As Integer = ListBox1.SelectedIndex If selectedIndex < 0 Then Exit Sub ' 未选中主题直接退出 Dim filePath As String = Path.Combine(My.Application.Info.DirectoryPath, "Data.txt") Dim allLines As List(Of String) = File.ReadAllLines(filePath).ToList() Dim newsubjCounter As Integer = 0 Dim delStart As Integer = -1 Dim delEnd As Integer = -1 For lineNum As Integer = 0 To allLines.Count - 1 Dim currentLine As String = allLines(lineNum).Trim() ' 匹配主题起始标记 If currentLine = "[newsubj]" Then If newsubjCounter = selectedIndex Then delStart = lineNum End If newsubjCounter += 1 End If ' 已找到起始位置时匹配对应正文结束标记 If delStart <> -1 AndAlso currentLine = "[endtext]" Then delEnd = lineNum Exit For End If Next ' 校验区间合法性后执行删除 If delStart <> -1 AndAlso delEnd >= delStart Then allLines.RemoveRange(delStart, delEnd - delStart + 1) File.WriteAllLines(filePath, allLines) ' 可选:删除成功后刷新列表框的主题列表 End If
适配说明
如果你的列表框索引是从1开始计数(即你提到的索引1对应第一个主题),只需将判断条件If newsubjCounter = selectedIndex修改为If newsubjCounter = selectedIndex - 1即可。
内容的提问来源于stack exchange,提问作者user16526006
相关产品推荐
相关产品推荐

