【发布时间】:2019-09-10 15:16:36
【问题描述】:
我有一个 excel 文件,它从外部 .exe 文件运行模型,并收集其输出以存储在各种工作表中以进行数据分析。
.exe 文件以可访问的基于文本的格式保存其输入文件。我意识到我可以通过直接从 vba 编辑输入文件并在循环中运行来创建批处理运行,但是它需要在 VBA 的 .txt 或 .xml 文件中查找和替换。我需要使用通配符作为我想要查找的字符串的一部分,每次都会更改,并且在第一次迭代时是不可预测的。例如:
我想在基于文本的文件中找到以下文本:
"0.3843 Flow_Rate_Mass kg/s"
并在重新运行我的脚本之前替换数字,以使用这个新的输入文件解决 .exe 以获得新的流速。但是,数字 0.3843 在第一个实例中可以是任何值(格式为 "x.xxxx Flow_Rate_Mass kg/s"),因此我需要使用通配符来查找和替换。
在第一次迭代之后,我将在前一次迭代中设置此值,因此我可以使用已知字符串的查找和替换,而无需通配符。
所以以下应该可以工作,但在第一次迭代时不够灵活:
Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String
sFileName = "C:\filelocation"
iFileNum = FreeFile
Open sFileName For Input As iFileNum
Do Until EOF(iFileNum)
Line Input #iFileNum, sBuf
sTemp = sTemp & sBuf & vbCrLf
Loop
Close iFileNum
sTemp = Replace(sTemp, "0.3843 Flow_Rate_Mass kg/s", "0.5000 Flow_Rate_Mass kg/s")
iFileNum = FreeFile
Open sFileName For Output As iFileNum
Print #iFileNum, sTemp
Close iFileNum
没有 REGEX 有什么解决办法吗?
【问题讨论】:
-
正则表达式有什么问题?太慢了?
-
如果您知道 Flow_Rate_Mass kg/s 将始终存在,请使用 Instr 找到它并返回 x 个字符(假设宽度固定),然后选择 Left 和 Right of那两个数字。如果您认为符合要求,我可以写下它和一个正则表达式。
-
代码总是可以做正则表达式做的事情。问题是,你想要多少代码。
-
@QHarr 我不知道 REGEX(我是 VBA 自学成才,是一名机械工程师,而不是程序员)并且在这种情况下真的没有时间学习 - 正计划在发现此问题之前的几个小时内实施此操作。您的第二个建议可能会奏效。明天早上我会检查它的固定宽度。