Исследование текстовых файлов и обработка строк
Изучение кода программы Sort Text
- В меню Файл программы Sort Text щелкните на команде Выход и остановите программу.
-
Откройте Редактор кода и отобразите код процедуры события mnuSortTextItem_Click. Мы уже обсуждали первую часть этой процедуры события, которая с помощью метода Substring подсчитывает число строк в текстовом поле и ищет коды возврата каретки. Остальная часть процедуры события задает размерность строкового массива, копирует в этот массив все строки текста, вызывает процедуру для сортировки массива и отображает переупорядоченный список в текстовом поле. Полная процедура события mnuSortTextItem_Click выглядит так:
Dim ln, curline, letter As String Dim i, charsInFile, lineCount As Short 'определяем число строк объекта текстового поля (txtNote) lineCount = 0 'эта переменная содержит общее количество строк charsInFile = txtNote.Text.Length 'получаем общее число символов For i = 0 To charsInFile - 1 'берем по одному символу letter = txtNote.Text.Substring(i, 1) 'получаем символ If letter = Chr(13) Then 'если нашли возврат каретки lineCount += 1 'переходим на следующую строку (увеличиваем счетчик) i += 1 'пропускаем символ перевода строки (всегда следует за возвратом 'каретки) End If Next i 'создаем массив для хранения текста из текстового поля ReDim strArray(lineCount) 'создаем массив требуемого размера curline = 1 ln ="" 'используем ln для посимвольного создания строк For i = 0 To charsInFile - 1 'снова организуем цикл по всему тексту letter = txtNote.Text.Substring(i, 1) 'получаем символ If letter = Chr(13) Then 'если нашли возврат каретки curline = curline + 1 'увеличиваем счетчик строк i += 1 'пропускаем символ перевода строки ln = "" 'очищаем строку и переходим к следующей Else ln = ln & letter 'добавляем символ в строку strArray(curline) = ln 'и помещаем в массив End If Next i 'сортируем массив ShellSort(strArray, lineCount) 'затем отображаем отсортированный массив в текстовом поле txtNote.Text = "" curline = 1 For i = 1 To lineCount txtNote.Text = txtNote.Text & _ strArray(curline) & vbCrLf curline += 1 Next i txtNote.Select(1, 0) 'удаляем выделение текста
Массив strArray был объявлен в стандартном модуле (Module1.vb), который также является частью этой программы. С помощью оператора ReDim и переменной lineCount я задаю размер массива strArray как динамический. Этот оператор создает массив, который содержит число элементов, равное числу строк текста, содержащегося в текстовом поле (требование для процедуры ShellSort ). Используя цикл For и переменную ln, я снова сканирую текстовое поле, ищу символы возврата каретки, и копирую каждую найденную полную строку в strArray. После того, как массив заполняется текстом, я вызывают процедуру ShellSort, созданную ранее в стандартном модуле Module1.vb.
-
Отобразите в Редакторе кода стандартный модуль Module1.vb. Этот модуль объявляет открытую переменную массива strArray, а затем определяет содержимое процедуры ShellSort. Процедура ShellSort использует для сравнения элементов массива оператор сравнения <= и меняет местами все элементы, которые находятся в неправильном порядке. Эта процедура выглядит так:
Sub ShellSort(ByRef sort() As String, ByVal numOfElements As Short) Dim temp As String Dim i, j, span As Short 'Процедура ShellSort сортирует элементы массива sort() 'в нисходящем порядке и возвращает его в вызывающую процедуру. span = numOfElements \ 2 Do While span > 0 For i = span To numOfElements - 1 For j = (i - span + 1) To 1 Step -span If sort(j) <= sort(j + span) Then Exit For 'меняем местами элементы массива, расположенные не по 'порядку temp = sort(j) sort(j) = sort(j + span) sort(j + span) = temp Next j Next i span = span \ 2 Loop End Sub
Этот метод сортировки постоянно делит главный список элементов на подсписки, которые в два раза меньше. Затем сортировка сравнивает самые верхние и самые нижние элементы подсписков и проверяет, в правильном ли порядке они расположены. Если эти элементы расположены в неверном порядке, они меняются местами. Конечным результатом является массив с именем sort(), который отсортирован по алфавиту в нисходящем порядке. Чтобы изменить порядок сортировки, просто измените оператор сравнения на противоположный (измените <= на >=).
Перейдем к еще одной вариации на тему программы Quick Note, которая реализует базовое шифрование строк.
Защита текста с помощью шифрования
Теперь, когда у вас есть некоторый опыт работы с ASCII-кодами, вы можете писать простые процедуры шифрования, которые сдвигают ASCII-коды вашего документа и "кодируют" текст, чтобы скрыть его от посторонних глаз. Этот процесс, известный как шифрование, математически изменяет символы в файле, делая их нечитаемыми для случайного наблюдателя. Конечно, чтобы успешно использовать шифрование, вы также должны иметь возможность сделать обратное преобразование - в противном случае вы просто испортите ваши файлы вместо того, чтобы защитить их. Также необходимо создать такую схему шифрования, которую нельзя будет легко распознать. Это сложный процесс, который в примере программы для этой лекции только начинается.
Следующие упражнения демонстрируют, как безопасно шифровать и расшифровывать текстовые строки. Запустите программу Encrypt Text и посмотрите на простой алгоритм шифрования в действии.