2013-02-19 6 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

+0

Немного удивил этот ответ - RegExp может запускать замену одного кадра, а не потенциальную длинную ветвь Mid. – brettdj

0

Вы не можете заменить подстановочные знаки, используя функцию замены Excel. Вы, скорее всего, лучше удачи, используя Using Regex/vbscript

0

Функция Replace поиск только для точного соответствия. Чтобы заменить строку в соответствии с шаблоном, вы должны использовать регулярные выражения.

Хороший старт - это учебник http://www.macrostash.com/2011/10/08/simple-regular-expression-tutorial-for-excel-vba/. После сопоставления используйте Mid() для замены содержимого.

Не забудьте сначала добавить ссылку «Регулярные выражения Microsoft VBScript» с помощью Инструменты -> Ссылки.

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 
Смежные вопросы