Источник: http://bit.pirit.info/forum/viewtopic.php?t=215
Автор: BiT
rootsoft@mail.ru
Реверс строки, или как из ТОПОРа
сделать РОПОТ.
Да я знаю, что
специальной АПИшки для этого нет,
Но нужна ли она нам?
Когда используя 3
переменные, 1 цикл и пару функций
Можно реализовать
данное превращение.
Для
тех, кто в танке и не понял из названия, о чем идет речь, объясняю.
В
данной статье я объясню, как написать программу для переворачивания строк, т.е.
как ТОПОР превратить в РОПОТ.
Раньше
этот вопрос, должно быть, был актуален, но в 6 версии Visual Basic появилась
функция StrReverse, которая
позволяет, написав всего несколько строчек кода перевернуть необходимый вам
текст. Помимо StrReverse в 6 версии
добавлены еще такие функции работы со строками как Split,
InstrRev, Filter, Join. Так же включены специализированные функции FormatNumber,
FormatDateTime, FormatCurrency
и FormatPercent.
Синтаксис:
StrReverse(Expression
As String)
Изменяет
порядок следования символов в строке, на обратный.
Т.е.
если переменная содержит “ТИП”, функция возвратит “ПИТ”.
Пример
использования функции StrReverse:
Option Explicit
‘Делаем
объявление переменных обязательным
Dim strStroka As String
‘Объявляем
переменную, для хранения текста, строкового типа
Private
Sub Form_Load()
'При
загрузке формы уберем весь текст из полей
Text1.Text
= ""
Text2.Text
= ""
End
Sub
Private Sub Text1_Change()
‘Чтобы
отслеживать изменения в текстовом поле, весь код помести в событие поля Change.
strStroka = Text1.Text
‘Текст
введенный в текстовое поле присваиваем переменной strStroka
Text2.Text = StrReverse(strStroka)
‘Выводим
результат работы функции во второе текстовое поле
End Sub
А
как же поступали раньше, да, интересно.
А
чего тут думать давайте напишем программу, без использования функции.
Работа
со строками может приносить интересные плоды, и я не совсем давно написал одну
программу.
Объясню,
зачем нужны переменные, строка из поля будет попадать для обработки в первую
переменную - strA, во вторую
переменную, strB, после
обработки будет помещен результат, после чего выведен во второе текстовое поле.
Ну а третья переменная, I, понадобится для хранения значения
счетчика, используемого в цикле.
Что
нам необходимо?
Не
будем терять время и приступим, вначале создадим новый проект и форму
переименуем из Form1 в ReversThis.
На форме расположим 2 TextBox
(текстовых поля) и 2 CommandButton (кнопки).
Переименуем соответственно txtFirst и txtSecond,
cmdCls и cmdExit. Думаю,
название элементов говорят сами за себя, в первое текстовое поле мы будем
вводить текст, а во втором получать результат разворота. Чтобы получилась не
сырая недоработка, а законченный проект – нажатие на одну кнопку будет очищать
текстовые поля, а на вторую завершать приложение.
Для выполнения поставленной задачи нам потребуется использовать
цикл For …Next и 2
функции работы со строками: Len и Mid.
Функция Len возвращает число символов содержащихся в
строковой переменной, Len(strA).
Например:
Помести на форме TextBox, Label.
Dim strA as String
strA = Text1.text
Label1.Caption = Len(strA)
Чтобы программа отслеживала изменения, происходящие в текстовом
поле, этот код должен происходить по событию Change.
Private Sub Text1_Change()
End Sub
Для очищения текстового поля и метки по событию формы Load,
приравняем: Text1 = "" и Label1 =
""
Private Sub Form_Load()
End Sub
Но вернемся к нашей программе.
Для чего же нужна будет нам функция Len?
Мы вводим текст в поле и с помощью функции отслеживаем длину
строки, чтобы использовать ее в цикле.
Задумались?
Это значение будет указывать нам максимальное значение в цикле.
Т.е. цикл будет происходить от 1 до Len(strA).
Ладно, дальше станет понятнее.
Еще нам нужна функция Mid.
Синтаксис:
Mid(“переменная”,
“начальная_позиция”, “количество_символов”)
Например:
Private Sub Form_Load()
Dim strA As String
strA = "Пример Использования Функции"
Label1 = Mid(strA, 8, 13)
'Результат "Использования"
End Sub
С помощью функции Mid мы будем обрабатывать
переменную strB.
Вот собственно итог нашей работы:
Option Explicit
'Откройте пункт в меню Tools=>Options...
'И поставьте галочку, Require
Variable Declaration
'Теперь Option Explicit, будет появляться автоматически при
создании нового проекта
'Это нужно для предотвращения лишних ошибок, в работе с
переменными
Dim strA As String
'Объявляем переменную strA как строковую
'Строка взятая из ТБ1
Dim strB As String
'Объявляем переменную strB как строковую
'Строка помещена в ТБ2
Dim I As Integer
Private Sub Form_Load()
'при загрузке формы очистим оба текстовых поля
txtFirst.Text = ""
txtSecond.Text = ""
End Sub
Private Sub txtFirst_Change()
'Событие Change возникает при любом действии с текстовым полем
'Это нажатие на клавишу или вставка из буфера
strB = ""
'При каждом изменении strB будет очищаться, и строиться заново
strA = txtFirst.Text
'Помещаем в переменную текст из поля
For I = 1 To Len(strA)
'Цикл For ...Next
'Начальное значение 1, конечное это - длина строки из переменной
strB = Mid(strA, I, 1) & strB
'Самая важная строка.
'Строим переменную, обрезая переменную strA
'Где I меняется в цикле от 1 до длины строки
'В переменную обрезается 1 символ, & strB - сохраняет
прежнее значение
Next I
'Продолжение цикла
txtSecond.Text = strB
'Вывод результата в текстовое поле
End Sub
Private Sub cmdCls_Click()
'При нажатии на кнопку очищаем текстовые поля и переменные
txtSecond.Text = ""
strB = ""
txtFirst.Text = ""
strA = ""
End Sub
Private Sub cmdExit_Click()
'Выгружаем форму и завершаем программу
Unload Me
End Sub