Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 30.10.2016
Сообщений: 6

Замена символов через раз

12.11.2016, 15:16. Показов 1683. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
итак, есть код найденный тут на форуме
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub mac1()
Dim x
With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.HomeKey Unit:=wdStory
For Each x In Split(UDAL)
    Selection.Find.Execute x, Replace:=wdReplaceAll
Next
Selection.Find.Execute "1", ReplaceWith:="2", Replace:=wdReplaceAll
End Sub
оно заменяет (в данном случае) цифру 1 на 2. Но как сделать так чтобы заменяло не каждую единицу, а например через раз? Я так понимаю нужно подшаманить wdReplaceAll, но неуверен что прав в этом.

какова цель:
чтобы 111111.....
было 2121212....
возможно ли это?

забыл указать - кодес этот под макрос для ворда
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2016, 15:16
Ответы с готовыми решениями:

Замена значения в матрице. Работает через раз.
Задание: Составить программу на языке С++.В матрице размерности 10 на 6 найти номер первого из столбцов, не содержащих ни одного из...

Замена символов в массиве через Replace
Не знаю как сделать это через Replace! Задача:Дан массив символов. Преобразовать его, заменив точками все двоеточия (:), встречающиеся...

Замена символов в строке через оператор case
Cоздайте процедуру, которая в строке символов заменит буквы от "b" к "f" символом "x", символ '(' символом ')' i символ '&'...

9
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.11.2016, 18:44
Сечас попробуем скмпилировать на основе темы NKAmur Преобразовать абзацы по четности и нечетности! Думаю, минут за 20.
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
12.11.2016, 18:47
Цитата Сообщение от IRWIN69 Посмотреть сообщение
есть код найденный тут на форуме... кодес этот под макрос для ворда
Почему вопрос задали в разделе VB6, а не в разделе Word, где нашли код? Макрос автозамены в word
Пробуйте
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub mac1()
With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "1"
    .Replacement.Text = "2"
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.HomeKey Unit:=wdStory
Do While Selection.Find.Execute(Replace:=wdReplaceOne) 'замена
  Selection.Collapse wdCollapseEnd
  Selection.Find.Execute                               'поиск без замены
  Selection.Collapse wdCollapseEnd
Loop
End Sub
2
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.11.2016, 19:14
Лучший ответ Сообщение было отмечено IRWIN69 как решение

Решение

Ну не за 20, а за 18 переверстал (и испытал):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub OddTextFilter()
Const s = "1" 'заменяемый символ (в нечётных позициях)
Const z = "2" 'заменяющий символ
Dim even As Boolean 'счётчик (датчик) чётности найденного s
 
With Selection
    .HomeKey wdStory 'перевод курсора в начало документа Word
    .Find.Text = s  'настройка диалога поиска/замены (который по CTRL h)
 
    
    Do While .Find.Execute(Replace:=wdReplaceNone) 'пока находим этот символ
        If Not even Then    'если он нечётный - заменяем на z
            .TypeText z     'впечатали z вместо найденного s
            .Collapse Direction:=wdCollapseEnd 'сброс выделения после очередной замены
        End If
        
        even = Not even 'расчёт на "первый-второй"
    Loop
    
End With
End Sub
Цитата Сообщение от Казанский Посмотреть сообщение
в разделе VB6
Тоже хотел спросить. Мне думается, свежая молодёжь видит VB чем-то более солидным, глобальным… Мол, в MS Office сидят всякие офисные тётки… и это тоже, конечно, но там не всё так грустно (благодаря разделу https://www.cyberforum.ru/vba/)!

Строки 10—14 читаются так (для справки). Не искать:
  • соответствия по регистру
  • только целые слова
  • соответствий условным значкам (подстановочные знаки)
  • соответствия по произношению (на русском это вообще не работает)
  • всю парадигму слов


Ой, не спешили б Вы, Казанский, со спасибо! Я б ещё наговорил... Шучу-шучу.
2
1 / 1 / 0
Регистрация: 30.10.2016
Сообщений: 6
12.11.2016, 20:13  [ТС]
спасибо, подошло, пашет.
не подскажете что нужно сделать чтобы я мог сам менять через какое кол-во символов будет замена? а не только во второй раз. ваш код подходит идеально, но иногда бывает нужда в иных заменениях.

Разместил эту тему тут так как нашел эту ветку раньше ветки ворда и уж подумал раз visual basic, то ветка может соответствовать, а в вами (Казанский) упомянутую ветку я не разместил тему так как кодес сохранил довольно таки давно и даже не знал о существовании той ветки. кстати, код взят не из указанной вами темы, а из другой. вероятно кто-то скопипастил в другую тему без указания источника.
1
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.11.2016, 21:12
Цитата Сообщение от IRWIN69 Посмотреть сообщение
что нужно сделать чтобы я мог сам менять через какое кол-во символов будет замена?
А я ведь сразу об этом подумал! Но пока промежуточный:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub OddEvenTextFilter()
Const odd = -1  'а если сделать = 0 (False), заменит в чётных позициях
Const s = "1"   'заменяемый символ (в нечётных позициях)
Const z = "2"   'заменяющий символ
Dim even As Boolean 'счётчик (датчик) чётности найденного s
If Not odd Then even = Not even
 
With Selection
    .HomeKey wdStory 'перевод курсора в начало документа Word
    .Find.Text = s   'искомый текст
 
    
    Do While .Find.Execute(Replace:=wdReplaceNone) 'пока находим этот символ
        If Not even Then    'если он нечётный - заменяем на z
            .Range.HighlightColorIndex = wdYellow 'подсветка s
            .TypeText z     'впечатали z вместо найденного s
        End If
        
        even = Not even 'расчёт на "первый-второй"
    Loop
   
End With
End Sub
1
1 / 1 / 0
Регистрация: 30.10.2016
Сообщений: 6
12.11.2016, 21:21  [ТС]
пашет только на чет-нечет.
есть возможность указания к примеру замены 3 или 4 символа с пропуском идущих до?
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.11.2016, 21:29
IRWIN69, дайте спокойно поработать над заданной темой. Мы тут не в чате.
0
1 / 1 / 0
Регистрация: 30.10.2016
Сообщений: 6
12.11.2016, 21:30  [ТС]
кстати забыл упомянуть, почему-то замененные символы выделены желтым цветом

UPD:
окай, извините. просто спросил.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
13.11.2016, 01:17
Да захотелось мне так! Я ж выступаю по теме для своего удовольствия, а не на заказ.

В итоге лихорадка субботнего вечера дала нам таковы слова:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub MagicTextFilter()
Const n = 4     'кратность действия замен (натуральное число): 1-й, 5-й, 9-й…
Const s = "1"   'заменяемый текст
Const z = "2"   'заменяющий текст
Dim k As Long   'счётчик (датчик) кратности найденного s
 
    With Selection
        .HomeKey wdStory 'перевод курсора в начало документа Word
        .Find.Text = s   'искомый текст
        Do While .Find.Execute(Replace:=wdReplaceNone) 'пока есть s
            k = k + 1
            If k Mod n = 1 Then .TypeText z 'впечатали z вместо s
        Loop
    End With
End Sub
А то, что я сказал было, искал в 2009 году некий «китайский мудрец»:
Цитата Сообщение от wenrouyuzhou Посмотреть сообщение
Заказчику сдается готовый текст где каждый 3-5 символ заменён на "?".
В решении:
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Pixelize.doc (39.0 Кб, 88 просмотров*)
замените в 6-й строке кода знак вопроса (?) на нужный вам символ (2) или ряд символов.

На рисунках подсвечены символы, подвергнутые замене через раз (OddEvenTextFilter) и при n=4 (код этого поста), начиная с первого вхождения искомой строки s (это остаток 1 в строке 12).
_______________
* даже не ожидал, что такую чушню каждый месяц кто-нибудь да смотрит (за 7 лет обычно до 10 просмотров)
Миниатюры
Замена символов через раз   Замена символов через раз  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2016, 01:17
Помогаю со студенческими работами здесь

Замена всех символов в урл через HTACESS
Добрый день. Никак не могу найти решение: требуется при обращении по адресу http://site.ru/catalog1/catalog2/page.html открывалась...

Замена символов в строке / regexp через метод? Можно ли?
Рылся, рылся не нашел. В javascript при работе с рег.выр-ниями есть возможность в методе replace в каче-ве второго параметра передавить...

Замена регистра символов в предложении с верхнего на нижний через один
Как сделать так,чтобы программа меняла регистр предложений с верхнего на нижний через один?

За один раз удалить через str_replace сразу несколько символов из строчки
Как "str_replace", за раз удалить сразу несколько символов из строчки? Что та никак массив не удается отсортировать, неполное...

Определить сколько раз в строке встречается заданное слово через массив символов
C# ИМЕННО ЧЕРЕЗ МАССИВ СИМВОЛОВ! Определить сколько раз в строке встречается заданное слово


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru