Страница: 1 |
Вопрос: поиск и замена текста в файле
Добавлено: 23.01.07 02:37
Автор вопроса: maximace
Помогите пож-та отредактировать текст.
1. В тексте надо найти фрагменты по шаблону «ТЕП-??-??-???-?#»
2. Затем изменить в найденном тексте последний знак, а именно добавить пред ним «0», чтобы стало «ТЕП-??-??-???-0?#»
ну и т.д. (поняв принцип, я смогу и другие заменить, например ТЕП-??-0?-00? на ТЕП-??-?-0?.
Записал макрос через функцию автозаписи (внизу):
много мусора, но одну строку меняет и может двигаться дальше. Попробовал зациклить, но для итогового значения кол-ва итераций надо посчитать кол-во замен.
Я это себе представляю так:
1. Подсчет кол-ва фрагментов текста, удовлетворяющих шаблону «ТЕП-??-??-???-?#».
2. После достижения конца файла Присвоение этого значения в качестве кол-ва цикла
3. Выполнение моего кода.
Не подскажете?
' М_попытка_всего_пошагово Макрос
' Макрос записан 22.01.2007 maximace
'
Selection.Find.ClearFormatting
With Selection.Find
.Text = "ТЕП-^?^?-^?^?-^?^?^?-^?#"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Find.ClearFormatting
With Selection.Find
.Text = "^?#"
.Replacement.Text = ""
.Forward = False
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Application.Keyboard (1033)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^##"
.Replacement.Text = "0^&"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
'
With Selection
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseStart
Else
.Collapse Direction:=wdCollapseEnd
End If
.Find.Execute Replace:=wdReplaceOne
If .Find.Forward = True Then
.Collapse Direction:=wdCollapseEnd
Else
.Collapse Direction:=wdCollapseStart
End If
.Find.Execute
End With
End Sub
Ответить
Номер ответа: 1Автор ответа: ygen
Вопросов: 36Ответов: 87
Web-сайт: soft.ygen.ru/ Профиль | | #1
Добавлено: 23.01.07 15:17
Судя по всему тебе почти никто ничего не подсказал.Могу кинуть текстик где написано как сделать обычный поиск и замену.Попробуй поработать с ним:
Private Sub Command1_Click() 'Ïðè íàæàòèè íà êíîïêó:
If InStr(qw, Form1.txtMain.Text, Text1.Text) <> 0 Then 'Ñâåðÿåòñÿ 2 òåêñòîâûõ ïîëÿ
Form1.txtMain.SetFocus 'Íà Text2 ñòàâèì êóðñîð
Form1.txtMain.SelStart = InStr(qw, Form1.txtMain.Text, Text1.Text) - 1 'Óñòàíàâëèâàåì êóðñîð ïåðåä ñîâïàâøèìñÿ ñëîâîì
Form1.txtMain.SelLength = Len(Text1.Text) 'Ñ ïîìîùüþ ôóíêöèè Len ñ÷èòàåì ñêîëüêî ñèìâîëîâ â Òåêñòîâîì ïîëå 1, è ñòîëüêî æå âûäåëÿåì
qw = InStr(qw, Form1.txtMain.Text, Text1.Text) + Len (Text1.Text) ' Èçìåíÿåì ïåðåìåííóþ qw íà ïîçèöèþ êóðñîðà, äëÿ òîãî, ÷òîáû ïðè ñëåäóþùåì ïîèñêå, íå èñêàòü óæå íàéäåííîå ñëîâî, à èñêàòü ñëåä. ñëîâî
Else ' Åñëè â òåêñòå áîëüøå íåò èñêîìîãî ñëîâà, òî âûâîäèì îá ýòîì ñîîáùåíèå.
MsgBox "Â òåêñòå íåò òàêèõ ñëîâ"
End If
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Command5_Click()
frmFind.ScaleHeight = 945
End Sub
Private Sub Command3_Click()
On Error GoTo 1
Form1.txtMain.SelText = Text2.Text: GoTo 2
1 MsgBox "Îøèáêà.Âûäåëåííûé òåêñò íå íàéäåí èëè âû çàáûëè íàæàòü íà êíîïêó íàéòè."
2
End Sub
Private Sub Form_Load()
qw = 1
frmFind.ScaleHeight = 945
'Call SetFormPosition(Me.hWnd, True)
End Sub
Ответить
Номер ответа: 2Автор ответа: bi-lya
Вопросов: 1Ответов: 125
Профиль | | #2
Добавлено: 24.01.07 15:32
Попробуйте что-то такого
With Selection.Find
.Replacement.ClearFormatting
.Text = "ТЕП-^?^?-^?^?-^?^?^?-^?#"
a=len(.text)
.Execute Forward:=True , _
Wrap:=wdFindContinue
End With
Do Until Selection.Find.Found = False
Selection.MoveEnd Unit:=wdCharacter, Count:= a
Vstavka=mid(.text,1,a-2) & "0" & mid(.text,a-1)
Selection.Text = Vstavka
Selection.Find.Execute Forward:=True , _
Wrap:=wdFindContinue
Loop
Возможно, .text лучше вытащить в переменную.
Переделал на ходу, подобное у меня работает
Ответить
Номер ответа: 3Автор ответа: bi-lya
Вопросов: 1Ответов: 125
Профиль | | #3
Добавлено: 27.01.07 16:47
Извините, поправлю
With Selection.Find
.Replacement.ClearFormatting
.Text = "ТЕП-^?^?-^?^?-^?^?^?-^?#"
a=len(.text)
.Execute Forward:=True , _
Wrap:=wdFindContinue
Do Until Selection.Find.Found = False
Selection.MoveEnd Unit:=wdCharacter, Count:= a
Vstavka=mid(Selection.Find.Text,1,a-2) & "0" & mid(Selection.Find.Text,a-1)
Selection.Text = Vstavka
Selection.Find.Execute Forward:=True , _
Wrap:=wdFindContinue
Loop
Ответить
Страница: 1 |
Поиск по форуму