Язык WordBasic - практический подход

Прибамбасы


Ряд операторов позволяют выделять текст по признакам его оформления. Это особенно важно для больших документов, которые создавались на разных машинах и/или писались разными людьми.
SelectCurAlignment расширит выделение вперёд от точки вставки до параграфа с отличающимся типом выравнивания (по левому или правому краю, по центру или по ширине).
SelectCurSpacing расширит выделение вперёд от точки вставки до абзаца с отличающимся интерлиньяжем.
SelectCurIndent расширит выделение вперёд от точки вставки до параграфа с отличающимся левым или правым отступом.
SelectCurTabs расширит выделение вперёд от текущей точки до параграфа с отличающимися установками точек табуляции.
SelectCurColor расширит выделение вперёд от текущей точки до начала текста, выделенного другим цветом.
SelectCurFont расширит выделение вперёд от текущей точки до начала текста имеющего другой шрифт или иной размер шрифта.
Весьма полезные примеры использования перечисленных операторов выделения по оформлению приведены в Справке.
Заканчивая рассмотрение операторов и функций выделения текста, стоит упомянуть о мощном операторе SetSelRange Pos1, Pos2, выделяющем символы между позицией Pos1 и позицией Pos2. Его хорошо дополняет функция GetText$ Pos1 Pos2, возвращающая текст, заключенный между позициями, заданными ее аргументами.
Теперь, зная операторы перемещения и выделения, попробуем сделать что-нибудь полезное, напишем, например, макрос, помечающий все слова в тексте, начинающиеся с латинских букв, как английские. Это может вам сильно упростить проверку орфографических ошибок в смешанном тексте (например, в программной документации или в статье для журнала, так как текст после обработки этим макросом проверяется и по русскому, и по английскому словарю (для этого они, конечно же, должны быть установлены).
 
Sub MAIN
StartOfDocument


While AtEndOfDocument() <> -1
WordRight
SelectCurWord
a$ = Left$(Selection$(), 1)
If Asc(a$)< 123 Then Language "English (US)"
ShrinkSelection

Wend
End Sub
 
Пояснение. Оператор Language
устанавливает признак языка для выделенного участка текста.
Задание.
1. Модифицируйте эту макрокоманду, чтобы она работала только на выделенном вами участке текста.
2. Если подряд идет несколько английских слов, то попробуйте отмечать такой участок целиком, а не отдельные слова.
 
Если сохранить файл после его обработки этой макрокомандой, то он заметно “потолстеет”. Чтобы этого не произошло, после проверки орфографии можно выполнить макрос, возвращающий все к исходному состоянию:
 
Sub MAIN
EditSelectAll
Language "Русский"
While GetSelStartPos()<>GetSelEndPos()
ShrinkSelection
Wend ‘убрать выделение текста
End SUB
 
Популярная в языке WordBasic группа операторов Insert позволяет добавить текст или специальные символы начиная с позиции точки вставки. Например,
 
Insert Date$() – добавить в текст текущую дату;
InsertPara – вставить метку конца абзаца.
Insert Chr$(9) – вставить символ табуляции
Name$ = "Эдуард "                     ' присвоить значение переменной
Insert Name$                               ' и вставить его в текст
 
В WinWord нет операции по выделению слов в разрядку. Это сделает следующая макрокоманда.
 
Sub MAIN
‘ Вставляет дефис между непробельными символами.
b$ = Selection$()
c$ = ""
For i = 1 To Len(b$) - 1
c$ = c$ + Left$(b$, 1)
If (Left$(b$, 1) <> " ") And (Mid$(b$, 2, 1) <> " ") \
Then c$ = c$ + "-"
b$ = Mid$(b$, 2)
Next i
c$ = c$ + b$
EditCut  'вырезать выделенный участок
Insert c$ 'и вставить новый текст
End SUB
 
Все свои базы данных (БД) я начинал вести в редакторе Word 4.0 под DOS (на “ноутбуке” без жесткого диска трудно было придумать что-либо лучшее), затем перевел их под WinWord. Если нет необходимости формировать отчеты и делать сложные выборки, то средств этого редактора вполне достаточно для работы и поиска записей в такой БД. Так как моя БД растет со средней скоростью 1 Кбайт в день, момент, когда этот текстовый файл станет слишком большим, настанет весьма нескоро.Это не агитация за отказ от использования СУБД: просто в каждом конкретном случае следует выбирать наиболее соответствующее поставленной задаче средство. Так вот, в одной из баз дата обновления каждой записи весьма существенна. Простая макрокоманда
 
Sub MAIN
      Insert “ lch=” + Date$()
End SUB
 
позволяет при модификации записи записывать и текущую дату.
Симметричную оператору Insert операцию удаления слова, находящегося после точки вставки, делает оператор:
 
DeleteWord
 
Оператор DeleteBackWord соответственно удаляет слово, предшествующее точке вставки. Пробел, знак табуляции и знаки пунктуации считаются за целое слово. Обратите внимание, что оба эти оператора без операндов.
 

Содержание раздела