Опубликован: 31.08.2006 | Уровень: специалист | Доступ: свободно
Лекция 13:

Исследование текстовых файлов и обработка строк

Изучение кода программы Sort Text
  1. В меню Файл программы Sort Text щелкните на команде Выход и остановите программу.
  2. Откройте Редактор кода и отобразите код процедуры события 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.

  3. Отобразите в Редакторе кода стандартный модуль 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 и посмотрите на простой алгоритм шифрования в действии.

Сайдахмад Зарипов
Сайдахмад Зарипов
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?