最近尝试在做《方舟:生存进化》的配置项目自动解析,可以用软件来可视化配置项目。
项目文件是一个 Game.ini,但是里面的配置项目还是很奇特的。
具体大致为下:
[demoini]
# 实际从这里开始到结尾只有一行,为了方便观看分为多行;
ConfigOverrideItemCraftingCosts=(
ItemClassString="测试项目", # 一般属性值
ToClass="ClassXXX"
BaseCraftingResourceRequirements=( # 类似于数组
(ResourceItemTypeString="PrimalItemStructure_BrickRoof_II_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=True),
(ResourceItemTypeString="PrimalItem_WeaponLongBow_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=False),
(ResourceItemTypeString="PrimalItemStructure_TanningRack_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=False)
),
Other=(Name="XXXXXX",Age=14), # 属性值也是可以嵌套的
End=1.000000
)
准确的说是一行显示,我只是为了方便观看,显示为多行。
我已经使用 Node 的 ini 模块来解析成 ConfigOverrideItemCraftingCosts=.....
这种,但是后面的值还是需要自己手动解析吗?自己尝试了一下似乎不是很容易手动解析。
请问这种格式的文件,有没有相关的现成解析方案?
以下是一些原始数据:(Game.ini)
[/script/shootergame.shootergamemode]
PvPZoneStructureDamageMultiplier=6.000000
bFlyerPlatformAllowUnalignedDinoBasing=False
bPassiveDefensesDamageRiderlessDinos=False
bDisableStructurePlacementCollision=False
onfigOverrideItemCraftingCosts=(ItemClassString="PrimalItemStructure_BrickRoof_II_C",BaseCraftingResourceRequirements=((ResourceItemTypeString="PrimalItem_WeaponLongBow_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=False)))
NPCReplacements=(FromClassName="Achatina_Character_BP_Aberrant_C",ToClassName="ChalkGolem_Character_BP_C")
NPCReplacements=(FromClassName="Angler_Character_BP_Aberrant_C",ToClassName="")
NPCReplacements=(FromClassName="Ankylo_Character_BP_Aberrant_C",ToClassName="Salmon_Character_Aberrant_C")
NPCReplacements=(FromClassName="Arthro_Character_BP_Aberrant_C",ToClassName="Spino_Character_BP_Aberrant_C")
ConfigOverrideItemCraftingCosts=(ItemClassString="PrimalItemStructure_BrickWallWithWindow_II_C",BaseCraftingResourceRequirements=())
ConfigOverrideItemCraftingCosts=(ItemClassString="PrimalItemConsumable_Sugar_C",BaseCraftingResourceRequirements=((ResourceItemTypeString="PrimalItemStructure_BrickRoof_II_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=True),(ResourceItemTypeString="PrimalItem_WeaponLongBow_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=False),(ResourceItemTypeString="PrimalItemStructure_TanningRack_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=False)))
ConfigOverrideItemCraftingCosts=(ItemClassString="PrimalItemStructure_Yurt_C",BaseCraftingResourceRequirements=((ResourceItemTypeString="PrimalItem_WeaponLongBow_C",BaseResourceRequirement=1.000000,bCraftingRequireExactResourceType=False)))
OverridePlayerLevelEngramPoints=0
OverridePlayerLevelEngramPoints=8
OverridePlayerLevelEngramPoints=8
目的只有一个,将其解析成 JSON 格式或任意支持遍历识别的对象。
有什么算法能解决这个问题吗?或者某些现有的解决方案?
没接触过,但是看这个格式似乎不难解析
((
->[{
,))
->}]
,(
->{
,)
->}
,=
->:
还有
True
->true
这种细节,对应替换后好像就类JSON
了,可能不能用标准JSON.parse
来解析 可试着用eval
。纯属猜测
按我设想替换后还是可以解析的,但是因为配置项里面有重复键,在
js
中只保留最后一项,这个部分如果要处理起来 转成数组 就比较麻烦不是几个replace
能搞定了。