如何高效读取游戏代码文本文件并准确识别其中的代码块
游戏自定义数据块识别解决方案(VB.NET适配)
你给出的代码是Paradox类游戏的专用数据格式,针对识别需求有两种简单易实现的方案,不需要复杂的抽象逻辑:
方案1:轻量自定义识别逻辑(无第三方依赖)
核心逻辑只需要统计当前块的括号平衡,比全局统计括号的方法更简洁不易出错:
- 逐行扫描文本,用正则匹配
数字={格式的行,命中后将前面的数字存为当前块ID,标记块起点,初始化括号计数器为1 - 后续扫描过程中遇到
{计数器+1,遇到}计数器-1,计数器归0时即为当前块的结束位置,直接截取起点到结束位置的内容就是完整的顶级代码块
对应VB.NET核心实现代码:
Imports System.Text.RegularExpressions Public Function ParseTopLevelBlocks(rawText As String) As Dictionary(Of Long, String) Dim blocks As New Dictionary(Of Long, String)() Dim currentId As Long = 0 Dim blockStartIndex As Integer = -1 Dim bracketCount As Integer = 0 ' 匹配顶层ID格式的正则 Dim topIdRegex As New Regex("(\d+)=\{") For i = 0 To rawText.Length - 1 If bracketCount = 0 Then Dim match = topIdRegex.Match(rawText, i) If match.Success AndAlso match.Index = i Then currentId = Long.Parse(match.Groups(1).Value) blockStartIndex = i + match.Length bracketCount = 1 i += match.Length - 1 End If Else If rawText(i) = "{"c Then bracketCount += 1 ElseIf rawText(i) = "}"c Then bracketCount -= 1 If bracketCount = 0 Then Dim blockContent = rawText.Substring(blockStartIndex, i - blockStartIndex).Trim() blocks.Add(currentId, blockContent) End If End If End If Next Return blocks End Function
方案2:转标准JSON直接解析(无需自行处理块识别)
只要对原始文本做简单的字符替换,就能转成标准JSON格式,直接用VB.NET内置的JSON库反序列化为对象,要导出电子表格直接取对应属性即可:
- 把所有
"替换为标准双引号" - 所有
键=值格式的内容替换为"键":值,字符串类型的值自动补双引号 - 顶层的
数字={修改为"数字":{ - 整个文本外层包裹一对大括号就是标准JSON,直接用
System.Text.Json库反序列化即可
两种方案的时间复杂度都是O(n),处理大文件效率很高,逻辑简单易调试,不需要复杂的语法分析知识即可实现。
内容的提问来源于stack exchange,提问作者Reciter of Poetry
相关产品推荐
相关产品推荐

