使用VBA从文本文件中提取字符串

时间:2015-10-23 08:08:58

标签: string vba

我有一个文本文件,其中包含每个具有对应值的变量列表。它具有以下结构

% Author: Name Surname

% Date:  /../..

% Other things ...

%----------------------------

% Output:

% Var1 = [1 0.5 5][8 5 0.9]

% Var2 = The signal is one from 0 sec to 0.5 sec; then its value increase ...
the description could span more than one row...

% Var3 = [...][...]

% Var4 = The signal is ...

% ...

% ------------------------------------------

到目前为止,我已将整个文件提取为一个字符串,我从中提取了作者和其他一般信息。

此时我要做的是在%Output之后提取文件的一部分:将每个变量名称和值复制到使用VBA的字表中。

该表有两列(var_name,var_value),并且应该包含与提取的变量一样多的行。

一旦我将每个var及其值放入字符串中,VBA代码就会将这些字符串写入表格中。

由于文档部分的特定结构包含输出,我不知道如何提取var及其值。

我想我可以首先提取变量名,然后将它们用作下一次搜索的边界,我的意思是,假设我以某种方式将var2变为var3,我可以编写一些代码来获取它们之间的所有内容并将其分配给字符串:

StringValueVar2 =信号是从0秒到0.5秒的信号;然后它的价值增加......

描述可能跨越多行...

然后从%和空格中清除此字符串的Remove函数。

那么,我该怎么办?

1 个答案:

答案 0 :(得分:1)

看起来像Regex的工作。我在Word VBA中做了一个小例子,它会读取你的文件并吐出每个变量名及其值;无需进一步清除“%”或“=”。引用Microsoft VBScript Regular Expression 5.5Microsoft Scripting Runtime

注意:我假设您文件中的所有变量都是这样的:

<强>% [空格]的可变 [空格]的 = [空格]的

这会起作用吗?

Sub ParseMyFile()
Dim rex As RegExp
Dim txt As String, fil As String, fso As FileSystemObject
Dim mcol As MatchCollection, m As Match

fil = "[pathToYourTxtFile]"
Set fso = New FileSystemObject

Set rex = New RegExp
rex.Pattern = "(\%\s)([\w\d]+?)(\s\=\s)([\w\W\s\S\d\D\r\n]+?)(?=\%|\Z)"
rex.Global = True
rex.Multiline = False
txt = fso.OpenTextFile(fil).ReadAll

Set mc = rex.Execute(txt)
For Each m In mc
    Debug.Print "Variable: " & m.SubMatches(1)
    Debug.Print "Value: " & m.SubMatches(3)
Next m

End Sub