Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/MS Word: "УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ" - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: _Boroda_, китин  
MS Word: "УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ"
Alex_ST Дата: Вторник, 20.12.2011, 15:38 | Сообщение № 1
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Убирает многократные пробелы в выделенном тексте, а также пробелы перед знаками препинания.
[vba]
Код
Sub УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ()
      If Selection.Type <> wdSelectionNormal Then Exit Sub
      With Selection.Find
         .Execute "^w", , , 0, , , , , , " ", 2      ' заменить множественные пробелы на один
         .Execute "^p^w", , , 0, , , , , , "^p", 2    ' убрать пробелы в начале абзаца (после ^p)
         .Execute "^w^p", , , 0, , , , , , "^p", 2    ' убрать пробелы в конце абзаца (перед ^p)
      End With
      Dim i%, sPunkt$
      sPunkt = ".,;:!?)" & Chr(133)       ' список знаков пунктуации, перед которыми нужно убирать пробелы
      For i = 1 To Len(sPunkt)      ' убрать пробелы перед знаками пунктуации
         Selection.Find.Execute _
               " " & Mid(sPunkt, i, 1), , , 0, , , , , , Mid(sPunkt, i, 1) & " ", 2
      Next
End Sub
[/vba]
Не пойму, почему после закрывающей круглой скобки добавляет лишний пробел?



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 20.12.2011, 15:44
 
Ответить
СообщениеУбирает многократные пробелы в выделенном тексте, а также пробелы перед знаками препинания.
[vba]
Код
Sub УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ()
      If Selection.Type <> wdSelectionNormal Then Exit Sub
      With Selection.Find
         .Execute "^w", , , 0, , , , , , " ", 2      ' заменить множественные пробелы на один
         .Execute "^p^w", , , 0, , , , , , "^p", 2    ' убрать пробелы в начале абзаца (после ^p)
         .Execute "^w^p", , , 0, , , , , , "^p", 2    ' убрать пробелы в конце абзаца (перед ^p)
      End With
      Dim i%, sPunkt$
      sPunkt = ".,;:!?)" & Chr(133)       ' список знаков пунктуации, перед которыми нужно убирать пробелы
      For i = 1 To Len(sPunkt)      ' убрать пробелы перед знаками пунктуации
         Selection.Find.Execute _
               " " & Mid(sPunkt, i, 1), , , 0, , , , , , Mid(sPunkt, i, 1) & " ", 2
      Next
End Sub
[/vba]
Не пойму, почему после закрывающей круглой скобки добавляет лишний пробел?

Автор - Alex_ST
Дата добавления - 20.12.2011 в 15:38
KuklP Дата: Вторник, 20.12.2011, 17:00 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Леша, ты зря нарушил порядок, к-рый я задал. В этом все дело. После любого знака пунктуации в этом цикле ставится пробел.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Вторник, 20.12.2011, 17:07
 
Ответить
СообщениеЛеша, ты зря нарушил порядок, к-рый я задал. В этом все дело. После любого знака пунктуации в этом цикле ставится пробел.

Автор - KuklP
Дата добавления - 20.12.2011 в 17:00
Alex_ST Дата: Вторник, 20.12.2011, 17:20 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Да, Серёга, и в самом деле...
Это я проглядел shy
Но я же переставлял не просто так: у меня и до перестановки что-то глюкало (правда, не помню, что…) вот я и переставил: показалось, что так будет лучше.
Да и ещё к стыду своему спешил выполнить обещание кинуть "затравку" в ветку и поэтому забыл указать твой копирайт...
Завтра поправлю в остальных постах. Извини.
Должно быть так:[vba]
Код
Sub УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ()
'---------------------------------------------------------------------------------------
' Procedure    : УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ
' Author       : KuklP
' Purpose      : убрать многократные пробелы и пробелы перед некоторыми знаками пунктуации
' Notes        :
'---------------------------------------------------------------------------------------
       If Selection.Type <> wdSelectionNormal Then Exit Sub
       Dim i%, sPunkt$
       sPunkt = ".,;:!?)" & Chr(133)       ' список знаков пунктуации, перед которыми нужно убирать пробелы
       With Selection.Find
       For i = 1 To Len(sPunkt)      ' убрать пробелы перед знаками пунктуации
          .Execute "^w" & Mid(sPunkt, i, 1), , , 0, , , , , 0, Mid(sPunkt, i, 1) & " ", 2
       Next
          .Execute "^w", , , 0, , , , , 0, " ", 2        ' заменить множественные пробелы на один
          .Execute "^p^w", , , 0, , , , , 0, "^p", 2     ' убрать пробелы в начале абзаца (после ^p)
          .Execute "^w^p", , , 0, , , , , 0, "^p", 2    ' убрать пробелы в конце абзаца (перед ^p)
       End With
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 20.12.2011, 20:41
 
Ответить
СообщениеДа, Серёга, и в самом деле...
Это я проглядел shy
Но я же переставлял не просто так: у меня и до перестановки что-то глюкало (правда, не помню, что…) вот я и переставил: показалось, что так будет лучше.
Да и ещё к стыду своему спешил выполнить обещание кинуть "затравку" в ветку и поэтому забыл указать твой копирайт...
Завтра поправлю в остальных постах. Извини.
Должно быть так:[vba]
Код
Sub УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ()
'---------------------------------------------------------------------------------------
' Procedure    : УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ
' Author       : KuklP
' Purpose      : убрать многократные пробелы и пробелы перед некоторыми знаками пунктуации
' Notes        :
'---------------------------------------------------------------------------------------
       If Selection.Type <> wdSelectionNormal Then Exit Sub
       Dim i%, sPunkt$
       sPunkt = ".,;:!?)" & Chr(133)       ' список знаков пунктуации, перед которыми нужно убирать пробелы
       With Selection.Find
       For i = 1 To Len(sPunkt)      ' убрать пробелы перед знаками пунктуации
          .Execute "^w" & Mid(sPunkt, i, 1), , , 0, , , , , 0, Mid(sPunkt, i, 1) & " ", 2
       Next
          .Execute "^w", , , 0, , , , , 0, " ", 2        ' заменить множественные пробелы на один
          .Execute "^p^w", , , 0, , , , , 0, "^p", 2     ' убрать пробелы в начале абзаца (после ^p)
          .Execute "^w^p", , , 0, , , , , 0, "^p", 2    ' убрать пробелы в конце абзаца (перед ^p)
       End With
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 20.12.2011 в 17:20
KuklP Дата: Вторник, 20.12.2011, 19:38 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Насчет копирайта не парься, мне от него ни холодно ни жарко. Главное, чтоб от наших каракулей польза кому-нить была.
А вот 0 на формат ты зря убрал. Мало ли, что юзер искал до нас:
[vba]
Код
.Execute "^w", , , 0, , , , , 0, " ", 2
[/vba]
И думаю, ты зря называешь макросы кириллицей. В нелокализованных версиях могут быть проблемы.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Вторник, 20.12.2011, 19:46
 
Ответить
СообщениеНасчет копирайта не парься, мне от него ни холодно ни жарко. Главное, чтоб от наших каракулей польза кому-нить была.
А вот 0 на формат ты зря убрал. Мало ли, что юзер искал до нас:
[vba]
Код
.Execute "^w", , , 0, , , , , 0, " ", 2
[/vba]
И думаю, ты зря называешь макросы кириллицей. В нелокализованных версиях могут быть проблемы.

Автор - KuklP
Дата добавления - 20.12.2011 в 19:38
Alex_ST Дата: Вторник, 20.12.2011, 20:49 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
На счёт формата ты, конечно, прав... Я совсем забыл, что условия поиска-замены запоминаются и перед использованием макроса юзверг мог что-то искать с применением формата...
Ща поправлю во всех местах.

А по поводу кириллического названия макросов, так тут ведь я показываю принцип действия. Это же не "Готовые решения" (пока это там было бы оффтопом). И поэтому называю макросы как мне нравится. А кто сидит не на русской локали, вполне может и подправить "под себя".
К стати, в названиях своих UDF Excel я как раз специально использую русские названия чтобы было так же как в обычных формулах листа.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНа счёт формата ты, конечно, прав... Я совсем забыл, что условия поиска-замены запоминаются и перед использованием макроса юзверг мог что-то искать с применением формата...
Ща поправлю во всех местах.

А по поводу кириллического названия макросов, так тут ведь я показываю принцип действия. Это же не "Готовые решения" (пока это там было бы оффтопом). И поэтому называю макросы как мне нравится. А кто сидит не на русской локали, вполне может и подправить "под себя".
К стати, в названиях своих UDF Excel я как раз специально использую русские названия чтобы было так же как в обычных формулах листа.

Автор - Alex_ST
Дата добавления - 20.12.2011 в 20:49
Alex_ST Дата: Понедельник, 16.01.2012, 17:01 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Ещё подполировал Серёгин макрос: убрал цикл.
[vba]
Код
Sub УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ()
'---------------------------------------------------------------------------------------
' Procedure    : УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ
' Author       : KuklP & Alex_ST
' Purpose      : убрать в выделенном тексте многократные пробелы и пробелы перед некоторыми знаками пунктуации
' Notes        :
' URL          : http://www.excelworld.ru/forum/4-1127-13907-16-1326718916
'---------------------------------------------------------------------------------------
        If Selection.Type <> wdSelectionNormal Then Exit Sub
        With Selection.Find
           .ClearFormatting   ' очистить условия поиска по формату (они могли сохраниться от предыдущих ручных поисков/замен)
           .Execute "[ ^s^t]{1;}([.,:;…\!\?\)])", , , -1, , , , 0, 0, "\1", 2 ' убрать обычные и неразрывные пробелы и табуляции перед знаками препинания .,:;…!?)
           .Execute "^w", , , 0, , , , 0, 0, " ", 2          ' заменить множественные пробелы на один
           .Execute "^p^w", , , 0, , , , 0, 0, "^p", 2      ' убрать пробелы в начале абзаца (после ^p)
           .Execute "^w^p", , , 0, , , , 0, 0, "^p", 2     ' убрать пробелы в конце абзаца (перед ^p)
        End With
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 17.01.2012, 08:58
 
Ответить
СообщениеЕщё подполировал Серёгин макрос: убрал цикл.
[vba]
Код
Sub УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ()
'---------------------------------------------------------------------------------------
' Procedure    : УБРАТЬ_ЛИШНИЕ_ПРОБЕЛЫ
' Author       : KuklP & Alex_ST
' Purpose      : убрать в выделенном тексте многократные пробелы и пробелы перед некоторыми знаками пунктуации
' Notes        :
' URL          : http://www.excelworld.ru/forum/4-1127-13907-16-1326718916
'---------------------------------------------------------------------------------------
        If Selection.Type <> wdSelectionNormal Then Exit Sub
        With Selection.Find
           .ClearFormatting   ' очистить условия поиска по формату (они могли сохраниться от предыдущих ручных поисков/замен)
           .Execute "[ ^s^t]{1;}([.,:;…\!\?\)])", , , -1, , , , 0, 0, "\1", 2 ' убрать обычные и неразрывные пробелы и табуляции перед знаками препинания .,:;…!?)
           .Execute "^w", , , 0, , , , 0, 0, " ", 2          ' заменить множественные пробелы на один
           .Execute "^p^w", , , 0, , , , 0, 0, "^p", 2      ' убрать пробелы в начале абзаца (после ^p)
           .Execute "^w^p", , , 0, , , , 0, 0, "^p", 2     ' убрать пробелы в конце абзаца (перед ^p)
        End With
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 16.01.2012 в 17:01
nerv Дата: Понедельник, 16.01.2012, 17:44 | Сообщение № 7
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Alex_ST, приветствую! Особо не проверял, но попробуй так:

[vba]
Code
Sub io()
With CreateObject("VBScript.RegExp")
      .Global = True
      .MultiLine = True
      .Pattern = "^[\t ]+|[\t ](?=[\t ]|[(.,:;…!?)])|[\t ]$"
      Selection.Text = .Replace(Selection.Text, "")
End With
End Sub
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Понедельник, 16.01.2012, 17:45
 
Ответить
СообщениеAlex_ST, приветствую! Особо не проверял, но попробуй так:

[vba]
Code
Sub io()
With CreateObject("VBScript.RegExp")
      .Global = True
      .MultiLine = True
      .Pattern = "^[\t ]+|[\t ](?=[\t ]|[(.,:;…!?)])|[\t ]$"
      Selection.Text = .Replace(Selection.Text, "")
End With
End Sub
[/vba]

Автор - nerv
Дата добавления - 16.01.2012 в 17:44
v__step Дата: Понедельник, 16.01.2012, 18:45 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Саша, привет! У Алексея применен диалект Regexp, используемый непосредственно в механизме поиска и замены Word, т.к. нет другого способа не нарушить форматирование абзацев.


С уважением, Владимир
 
Ответить
СообщениеСаша, привет! У Алексея применен диалект Regexp, используемый непосредственно в механизме поиска и замены Word, т.к. нет другого способа не нарушить форматирование абзацев.

Автор - v__step
Дата добавления - 16.01.2012 в 18:45
Alex_ST Дата: Понедельник, 16.01.2012, 20:22 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Саша, Володя, привет!
Володя абсолютно прав:
Quote (v__step)
…применен диалект Regexp, используемый … в механизме поиска и замены Word, т.к. нет другого способа не нарушить форматирование абзацев

Я про этот диалект написАл в топике MS Word: Символы и знаки при поиске и замене



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаша, Володя, привет!
Володя абсолютно прав:
Quote (v__step)
…применен диалект Regexp, используемый … в механизме поиска и замены Word, т.к. нет другого способа не нарушить форматирование абзацев

Я про этот диалект написАл в топике MS Word: Символы и знаки при поиске и замене

Автор - Alex_ST
Дата добавления - 16.01.2012 в 20:22
nerv Дата: Понедельник, 16.01.2012, 22:52 | Сообщение № 10
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Всем привет!) Кто ж мог подумать, что Word такой глупый))) biggrin


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеВсем привет!) Кто ж мог подумать, что Word такой глупый))) biggrin

Автор - nerv
Дата добавления - 16.01.2012 в 22:52
Alex_ST Дата: Вторник, 17.01.2012, 08:50 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (nerv)
Кто ж мог подумать, что Word такой глупый
Это ещё мягко сказано: "Глупый"!
Более тупого приложения Мелко-мягких из числа поддерживающих VBA-прграммирование я ещё не встречал! cranky Ни свойств, ни методов, ни событий, …
Я ТУТ попробовал помочь сделать на листе не выводимую на печать кнопку для вызова макроса. Думал, наивный, что по аналогии с Ёкселем всё будет просто sad
Нет ни у кнопок, ни у фигур свойства "Выводить на печать"! Я у них даже .Visible не смог найти. И макрос к клику по фигурам не назначается... Додумался до того, чтобы разместить кнопку на форме, а перед печатью форму скрывать (UserForm.Show/Hide там всё-таки есть), но оказалось что невозможно отловить событие-аналог BeforePrint Ёкселя
А когда недавно попытался реализовать автосохранение документа по таймеру, то выяснил, что метод SaveCopyAs хоть и существует, но не у ThisDocument, а только у HTMLProjectItem object … Ну, просто бред какой-то! killed



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (nerv)
Кто ж мог подумать, что Word такой глупый
Это ещё мягко сказано: "Глупый"!
Более тупого приложения Мелко-мягких из числа поддерживающих VBA-прграммирование я ещё не встречал! cranky Ни свойств, ни методов, ни событий, …
Я ТУТ попробовал помочь сделать на листе не выводимую на печать кнопку для вызова макроса. Думал, наивный, что по аналогии с Ёкселем всё будет просто sad
Нет ни у кнопок, ни у фигур свойства "Выводить на печать"! Я у них даже .Visible не смог найти. И макрос к клику по фигурам не назначается... Додумался до того, чтобы разместить кнопку на форме, а перед печатью форму скрывать (UserForm.Show/Hide там всё-таки есть), но оказалось что невозможно отловить событие-аналог BeforePrint Ёкселя
А когда недавно попытался реализовать автосохранение документа по таймеру, то выяснил, что метод SaveCopyAs хоть и существует, но не у ThisDocument, а только у HTMLProjectItem object … Ну, просто бред какой-то! killed

Автор - Alex_ST
Дата добавления - 17.01.2012 в 08:50
nerv Дата: Вторник, 17.01.2012, 21:57 | Сообщение № 12
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Alex_ST, не то слово) Но все равно, та рега, кот. я написал как минимум пригодится мне в Excel. Только вместо [\t ] буду использовать \s smile
Насчет ворда. Эксперимент показал, что если не трогать при замене переводы строк, то формат не рушиться. Вот только как его обойти с минимальными потерями cool


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеAlex_ST, не то слово) Но все равно, та рега, кот. я написал как минимум пригодится мне в Excel. Только вместо [\t ] буду использовать \s smile
Насчет ворда. Эксперимент показал, что если не трогать при замене переводы строк, то формат не рушиться. Вот только как его обойти с минимальными потерями cool

Автор - nerv
Дата добавления - 17.01.2012 в 21:57
Alex_ST Дата: Вторник, 17.01.2012, 22:14 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (nerv)
.Pattern = "^[\t ]+|[\t ](?=[\t ]|[(.,:;…!?)])|[\t ]$"

Это выше моего понимания, к сожалению...
Даже если
Quote (nerv)
вместо [\t ] ... использовать \s
всё равно яснее не становится... Надо читать Бена Форту, а некогда: утром в метро ещё не проснулся, вечером засыпается, на работе и дома не получается никак smile



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 18.01.2012, 14:40
 
Ответить
Сообщение
Quote (nerv)
.Pattern = "^[\t ]+|[\t ](?=[\t ]|[(.,:;…!?)])|[\t ]$"

Это выше моего понимания, к сожалению...
Даже если
Quote (nerv)
вместо [\t ] ... использовать \s
всё равно яснее не становится... Надо читать Бена Форту, а некогда: утром в метро ещё не проснулся, вечером засыпается, на работе и дома не получается никак smile

Автор - Alex_ST
Дата добавления - 17.01.2012 в 22:14
nerv Дата: Среда, 18.01.2012, 10:40 | Сообщение № 14
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Alex_ST, v__step, приветствую!
Quote (Alex_ST)
Это выше моего понимания

Да там и понимать то особо не чего:
[vba]
Code
.Pattern = "^[\t ]+|[\t ](?=[\t ]|[(.,:;…!?)])|[\t ]$"
[/vba]
Весь паттерн можно разбить на три части (кот. "связаны" или):
1. ^[\t ]+ - все знаки пробела или табуляции в начале строки
2. [\t ](?=[\t ]|[(.,:;…!?)]) - знако пробела или табуляции за котором следует еще один знак пробела или табуляции или одни из символов, перечисленных в символьном классе. Тут можно быть записать проще. Например, так [\t ](?=[(\t .,:;…!?)]) (не проверял, но по идее должно работать)
3. [\t ]$ - знак пробела или табуляции в конце "строки". Опять-таки, как сейчас мне кажется, можно было записать так [\t ]+$.

Т.е. все регулярное выражение выглядело бы примерно так
var z = /^\s+|\s+$|\s(?=[\s(.,:;…!?)])/gm;
и удаляло бы любые пробельные символы, включая пробел, табуляцию, переводы строк и другие юникодные пробельные символы.

Если где не прав, Володя придет поправит smile


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Среда, 18.01.2012, 10:55
 
Ответить
СообщениеAlex_ST, v__step, приветствую!
Quote (Alex_ST)
Это выше моего понимания

Да там и понимать то особо не чего:
[vba]
Code
.Pattern = "^[\t ]+|[\t ](?=[\t ]|[(.,:;…!?)])|[\t ]$"
[/vba]
Весь паттерн можно разбить на три части (кот. "связаны" или):
1. ^[\t ]+ - все знаки пробела или табуляции в начале строки
2. [\t ](?=[\t ]|[(.,:;…!?)]) - знако пробела или табуляции за котором следует еще один знак пробела или табуляции или одни из символов, перечисленных в символьном классе. Тут можно быть записать проще. Например, так [\t ](?=[(\t .,:;…!?)]) (не проверял, но по идее должно работать)
3. [\t ]$ - знак пробела или табуляции в конце "строки". Опять-таки, как сейчас мне кажется, можно было записать так [\t ]+$.

Т.е. все регулярное выражение выглядело бы примерно так
var z = /^\s+|\s+$|\s(?=[\s(.,:;…!?)])/gm;
и удаляло бы любые пробельные символы, включая пробел, табуляцию, переводы строк и другие юникодные пробельные символы.

Если где не прав, Володя придет поправит smile

Автор - nerv
Дата добавления - 18.01.2012 в 10:40
v__step Дата: Среда, 18.01.2012, 17:34 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Quote (nerv)
Володя придет поправит
Ой, ребятушки, вы уж извините, совсем меня Чернобыль одолел. Потом, все потом - уже немножко осталось. Вчера дома долбанулся ногой - обо что не важно, но испугался, что не доплетусь до работы - считать некому... В общем, выживаем как можем. Но я все-таки надеюсь, что выползу. Первым делом буду добивать чистилку - это мой должок


С уважением, Владимир
 
Ответить
Сообщение
Quote (nerv)
Володя придет поправит
Ой, ребятушки, вы уж извините, совсем меня Чернобыль одолел. Потом, все потом - уже немножко осталось. Вчера дома долбанулся ногой - обо что не важно, но испугался, что не доплетусь до работы - считать некому... В общем, выживаем как можем. Но я все-таки надеюсь, что выползу. Первым делом буду добивать чистилку - это мой должок

Автор - v__step
Дата добавления - 18.01.2012 в 17:34
v__step Дата: Четверг, 19.01.2012, 10:50 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 27 ±
Замечаний: 0% ±

Привет, мужики! С Крещением!
Цитата (nerv)
формат не рушиться
Рушится. Попробуем так: напишем одно слово и выделим через одну буквы жирным шрифтом. Потом запустим такую процедуру:
[vba]
Код
Sub ПрощайФормат()
        Dim s As String
        s = Selection.Text
        Selection.Text = Left(s, Len(s) - 1)
End Sub
[/vba]Иначе и быть не может (иначе бедный Word должен выполнить очень сложный анализ - как что было отформатировано "до" и что с этим делать "после"). Лёша&Сережа спасли ситуацию выходом на Word-RegExp. Это был сильный ход. Кстати, не исключено, что и в этом случае форматирование когда-то может слететь (трудно протестировать все возможные ситуации)


С уважением, Владимир

Сообщение отредактировал v__step - Четверг, 19.01.2012, 10:59
 
Ответить
СообщениеПривет, мужики! С Крещением!
Цитата (nerv)
формат не рушиться
Рушится. Попробуем так: напишем одно слово и выделим через одну буквы жирным шрифтом. Потом запустим такую процедуру:
[vba]
Код
Sub ПрощайФормат()
        Dim s As String
        s = Selection.Text
        Selection.Text = Left(s, Len(s) - 1)
End Sub
[/vba]Иначе и быть не может (иначе бедный Word должен выполнить очень сложный анализ - как что было отформатировано "до" и что с этим делать "после"). Лёша&Сережа спасли ситуацию выходом на Word-RegExp. Это был сильный ход. Кстати, не исключено, что и в этом случае форматирование когда-то может слететь (трудно протестировать все возможные ситуации)

Автор - v__step
Дата добавления - 19.01.2012 в 10:50
nerv Дата: Четверг, 19.01.2012, 19:50 | Сообщение № 17
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Пожалуй, Володя прав) Насчет Excel, для себя я остановился на таком решении с ненужными пробельными символами
[vba]
Code
Sub io()
Dim x As String
x = ActiveCell.Value
With CreateObject("VBScript.RegExp")
     .Global = True
     .MultiLine = True
     .Pattern = "\n+|\t+"
     x = .Replace(x, " ")
     .Pattern = "^\s+|\s+$|\s+(?=[\s.,:;…!?)])"
     ActiveCell.Value = .Replace(x, "")
End With
End Sub
[/vba]
К сообщению приложен файл: 1231231.xls (22.5 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеПожалуй, Володя прав) Насчет Excel, для себя я остановился на таком решении с ненужными пробельными символами
[vba]
Code
Sub io()
Dim x As String
x = ActiveCell.Value
With CreateObject("VBScript.RegExp")
     .Global = True
     .MultiLine = True
     .Pattern = "\n+|\t+"
     x = .Replace(x, " ")
     .Pattern = "^\s+|\s+$|\s+(?=[\s.,:;…!?)])"
     ActiveCell.Value = .Replace(x, "")
End With
End Sub
[/vba]

Автор - nerv
Дата добавления - 19.01.2012 в 19:50
Alex_ST Дата: Пятница, 20.01.2012, 13:45 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Саш, а формулы на листе твоя Рега не покоцает? Ведь в них-то, наверное, править пунктуацию не стоит.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаш, а формулы на листе твоя Рега не покоцает? Ведь в них-то, наверное, править пунктуацию не стоит.

Автор - Alex_ST
Дата добавления - 20.01.2012 в 13:45
nerv Дата: Пятница, 20.01.2012, 13:53 | Сообщение № 19
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Привет, Леш) Код выше только для примера использования самой реги. Если надо обойти (исключить) формулы, то можно записать как-то так
[vba]
Code
Sub io()
MsgBox ActiveCell.HasFormula ' true = formula
MsgBox UsedRange.SpecialCells(2).Address
End Sub
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеПривет, Леш) Код выше только для примера использования самой реги. Если надо обойти (исключить) формулы, то можно записать как-то так
[vba]
Code
Sub io()
MsgBox ActiveCell.HasFormula ' true = formula
MsgBox UsedRange.SpecialCells(2).Address
End Sub
[/vba]

Автор - nerv
Дата добавления - 20.01.2012 в 13:53
Alex_ST Дата: Пятница, 20.01.2012, 14:55 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну да, а ещё сделать так чтобы не одну ячейку обрабатывала, а выделенный диапазон.
Надо ей аргументы как ParamAppay передавать и цикл по ним организовать...
Саня, а не оффтопим ли мы? Ведь топик-то про Word!



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу да, а ещё сделать так чтобы не одну ячейку обрабатывала, а выделенный диапазон.
Надо ей аргументы как ParamAppay передавать и цикл по ним организовать...
Саня, а не оффтопим ли мы? Ведь топик-то про Word!

Автор - Alex_ST
Дата добавления - 20.01.2012 в 14:55
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!