Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 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 '&#209;&#226;&#229;&#240;&#255;&#229;&#242;&#241;&#255; 2 &#242;&#229;&#234;&#241;&#242;&#238;&#226;&#251;&#245; &#239;&#238;&#235;&#255;
Form1.txtMain.SetFocus '&#205;&#224; Text2 &#241;&#242;&#224;&#226;&#232;&#236; &#234;&#243;&#240;&#241;&#238;&#240;
Form1.txtMain.SelStart = InStr(qw, Form1.txtMain.Text, Text1.Text) - 1 '&#211;&#241;&#242;&#224;&#237;&#224;&#226;&#235;&#232;&#226;&#224;&#229;&#236; &#234;&#243;&#240;&#241;&#238;&#240; &#239;&#229;&#240;&#229;&#228; &#241;&#238;&#226;&#239;&#224;&#226;&#248;&#232;&#236;&#241;&#255; &#241;&#235;&#238;&#226;&#238;&#236;
Form1.txtMain.SelLength = Len(Text1.Text) '&#209; &#239;&#238;&#236;&#238;&#249;&#252;&#254; &#244;&#243;&#237;&#234;&#246;&#232;&#232; Len &#241;&#247;&#232;&#242;&#224;&#229;&#236; &#241;&#234;&#238;&#235;&#252;&#234;&#238; &#241;&#232;&#236;&#226;&#238;&#235;&#238;&#226; &#226; &#210;&#229;&#234;&#241;&#242;&#238;&#226;&#238;&#236; &#239;&#238;&#235;&#229; 1, &#232; &#241;&#242;&#238;&#235;&#252;&#234;&#238; &#230;&#229; &#226;&#251;&#228;&#229;&#235;&#255;&#229;&#236;
qw = InStr(qw, Form1.txtMain.Text, Text1.Text) + Len(Text1.Text) ' &#200;&#231;&#236;&#229;&#237;&#255;&#229;&#236; &#239;&#229;&#240;&#229;&#236;&#229;&#237;&#237;&#243;&#254; qw &#237;&#224; &#239;&#238;&#231;&#232;&#246;&#232;&#254; &#234;&#243;&#240;&#241;&#238;&#240;&#224;, &#228;&#235;&#255; &#242;&#238;&#227;&#238;, &#247;&#242;&#238;&#225;&#251; &#239;&#240;&#232; &#241;&#235;&#229;&#228;&#243;&#254;&#249;&#229;&#236; &#239;&#238;&#232;&#241;&#234;&#229;, &#237;&#229; &#232;&#241;&#234;&#224;&#242;&#252; &#243;&#230;&#229; &#237;&#224;&#233;&#228;&#229;&#237;&#237;&#238;&#229; &#241;&#235;&#238;&#226;&#238;, &#224; &#232;&#241;&#234;&#224;&#242;&#252; &#241;&#235;&#229;&#228;. &#241;&#235;&#238;&#226;&#238;
Else ' &#197;&#241;&#235;&#232; &#226; &#242;&#229;&#234;&#241;&#242;&#229; &#225;&#238;&#235;&#252;&#248;&#229; &#237;&#229;&#242; &#232;&#241;&#234;&#238;&#236;&#238;&#227;&#238; &#241;&#235;&#238;&#226;&#224;, &#242;&#238; &#226;&#251;&#226;&#238;&#228;&#232;&#236; &#238;&#225; &#253;&#242;&#238;&#236; &#241;&#238;&#238;&#225;&#249;&#229;&#237;&#232;&#229;.
MsgBox "&#194; &#242;&#229;&#234;&#241;&#242;&#229; &#237;&#229;&#242; &#242;&#224;&#234;&#232;&#245; &#241;&#235;&#238;&#226;"
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 "&#206;&#248;&#232;&#225;&#234;&#224;.&#194;&#251;&#228;&#229;&#235;&#229;&#237;&#237;&#251;&#233; &#242;&#229;&#234;&#241;&#242; &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237; &#232;&#235;&#232; &#226;&#251; &#231;&#224;&#225;&#251;&#235;&#232; &#237;&#224;&#230;&#224;&#242;&#252; &#237;&#224; &#234;&#237;&#238;&#239;&#234;&#243; &#237;&#224;&#233;&#242;&#232;."
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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам