2013-02-19 90 views
0

我正在使用excel打开文本文件,找到某个字符串并将其替换为空白/删除它。我很难弄明白星号/通配符的正确语法,希望对某人来说这将是一个简单的答案!Excel,Vba,Asterisk,语法,文本文件

下面是我的代码的一个简短例子,以防它有一些隐藏的影响。

Sub ReplaceText() 
Dim DataFind As String 

Open "ORIGINAL\073347.TXT" For Binary As #1 
DataFind = Space$(LOF(1)) 
Get #1, , DataFind 
Close #1 

        '<<073347>> 
DataFind = Replace(DataFind, "<< * >>", "") 

Open "NEW\073347.TXT" For Output Access Write As #1 
Print #1, DataFind 
Close #1 

End Sub 

基本上我想找到一种特定的字符串的文本文件(语法明智的),在这种情况下,这将是“< < 073347 >>”但我似乎无法找到正确的语法用于找到任何与< < >>在任何一方,或者一旦我知道我做错了什么可能的其他事情。 “< < 073347 >>”工作正常。我试过“&”符号,添加空格等可能只是不在正确的上下文中。希望这是足够的信息。并提前致谢!

回答

0

可以使用Mid函数和一个循环来处理这个更好的运气:

Sub ReplaceText() 
    Dim DataFind As String 
    Open "1.TXT" For Binary As #1 
    DataFind = Space$(LOF(1)) 
    Get #1, , DataFind 
    Close #1 

         '<<073347>> 
    While InStr(DataFind, "<<") > 0 And InStr(DataFind, "<<") < InStr(DataFind, ">>") 
     DataFind = Mid(DataFind, 1, InStr(DataFind, "<<") - 1) & Mid(DataFind, InStr(DataFind, ">>") + 2, Len(DataFind)) 
    Wend 
    Open "1.TXT" For Output Access Write As #1 
    Print #1, DataFind 
    Close #1 
    End Sub 
+0

感谢。所有的答案都很有帮助。使用中间函数肯定是最不令人失望的,但我最终可能会回归一些RegEx的东西。感谢你们三位。 – Finch042 2013-02-19 03:03:43

+0

对此回应有点惊讶 - RegExp可以运行一次性替换,而不是一个潜在的长循环Mid循环。 – brettdj 2013-02-19 11:53:24

0

像这样使用

Sub ManipulateStrings() 
    Dim strIn As String 
    Dim objRegex As Object 
    'first and last sub-portions are matches, middle missing leading/trailing spaces 
    strIn = "<<073347>> ff <<fred>>, <<fred>>" 
    Set objRegex = CreateObject("vbscript.regexp") 
    With objRegex 
     .Global = True 
     .Pattern = "<< .+? >>" 
     If .test(strIn) Then 
      MsgBox .Replace(strIn, vbNullString) 
     Else 
      MsgBox "No matches" 
     End If 
    End With 
End Sub