Исследование текстовых файлов и обработка строк
Изучение кода программы Quick Note
-
В меню Файл программы Quick Note сделайте двойной щелчок мышью на команде Добавить дату. В Редакторе кода появится процедура события mnuInsertDateItem_Click. Вы увидите следующий программный код:
txtNote.Text = DateString & vbCrLf & txtNote.Text txtNote.Select(1, 0) 'удаление выделения
Эта процедура события добавляет в текстовое поле текущую дату (сгенерированную свойством DateString ), добавляя к ней символ возврата каретки (константу vbCrLf ) и значение свойства Text текстового поля. С помощью этой методики можно добавлять в текст, находящийся в текстовом поле, текущее время или любую другую информацию.
-
Задержитесь и посмотрите, как работают операторы конкатенации, а затем изучите в Редакторе кода процедуру события mnuSaveAsItem_Click. Вы увидите следующий программный код:
SaveFileDialog1.Filter = "Текстовые файлы (*.txt)¦*.txt" SaveFileDialog1.ShowDialog() If SaveFileDialog1.FileName <> "" Then FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output) PrintLine(1, txtNote.Text) 'копируем текст на диск FileClose(1) End If
Этот блок операторов использует для отображения диалогового окна Сохранить как. Объект диалога сохранения файлов проверяет, выбрал ли пользователь файл, открывает этот файл для вывода как файл номер 1, записывает значение свойства txtNote.Text на диск с помощью функции PrintLine, а затем закрывает этот текстовый файл. Обратите особое внимание на оператор
PrintLine(1, txtNote.Text) 'копируем текст на диск
который присваивает все содержимое текстового поля открытому файлу. PrintLine аналогична старым операторам Visual Basic Print и Print # ; она направляет вывод в указанный файл, а не на экран или принтер. Здесь важно то, что весь файл сохраняется в свойстве txtNote.Text.
- Снова посмотрите на функции FileOpen, PrintLine и FileClose, а затем закройте программу с помощью команды Close Solution (Закрыть решение) из меню File (Файл).
Вы закончили работу с программой Quick Note.
Обработка текстовых строк в коде программы
С помощью элемента управления TextBox и набора специальных операторов программы можно быстро открывать, редактировать и сохранять текстовые файлы на диск. Visual Basic также предоставляет несколько мощных операторов и функций, специально предназначенных для обработки в программах текстовых элементов. В этом разделе вы узнаете, как извлекать из текстовой строки полезную информацию, копировать список строк в массив и сортировать список строк.
Возможность сортировать набор строк очень полезна при работе с текстовыми элементами. Базовые концепции сортировки просты. Вы составляете список сортируемых элементов, а затем сравниваете элементы друг с другом и переставляете их до тех пор, пока список не окажется отсортированным по алфавиту в восходящем или нисходящем порядке. В Visual Basic вы можете производить сравнение одной строки с другой с помощью тех же операторов сравнения, которые вы используете для сравнения числовых значений. Фокус (который иногда вызывает длинные дискуссии среди компьютерных специалистов) здесь состоит в конкретном алгоритме сортировки, который вы используете для сравнения элементов списка. Мы не будем в этой лекции вдаваться в детали достоинств и недостатков различных алгоритмов сортировки. (Яблоком раздора обычно является скорость, которая имеет значение только тогда, когда сортируются несколько тысяч элементов.) Вместо этого мы изучим, как при сортировке производится базовое сравнение строк. По ходу дела вы узнаете о способах сортировки ваших собственных текстовых полей, полей списков, файлов и баз данных.
Обработка строк с помощью методов и ключевых слов
До сих пор при работе со строками чаще всего использовалась конкатенация их с помощью оператора конкатенации (&). Например, следующий оператор программы производит конкатенацию трех символьных выражений и присваивает результат "Все в сад!" строковой переменной Slogan:
Dim Slogan As String Slogan = "Все" & " в " & "сад!"
Также можно производить конкатенацию и обрабатывать строки с помощью методов из класса String библиотеки .NET Framework. Например, метод String.Concat позволяет выполнить эквивалентную конкатенацию строк с помощью такой записи:
Dim Slogan As String Slogan = String.Concat("Все", " в ", "сад!")
Соответственно, в Visual Basic .NET существует два метода для конкатенации строк и других задач по их обработке: можно использовать операторы и функции из более ранних версий Visual Basic ( Mid, UCase, LCase и т.д.), а можно новые методы из .NET Framework ( Substring, ToUpper, ToLower и т.д.). Никаких реальных ограничений на использование любой из этих методик не существует. В оставшейся части этой лекции представлено несколько полезных функций для обработки строк из класса String библиотеки .NET Framework, но иногда я буду использовать также и более старые строковые функции. Вы можете использовать либо один из этих методов, либо их комбинацию.
Следующая таблица содержит список методов .NET Framework, которые используются в последующих упражнениях, и их ближайшие эквиваленты из языка программирования Visual Basic .NET. В четвертом столбце этой таблицы приводится пример кода для методов класса String из библиотеки .NET Framework.
Метод .NET Framework | Функция Visual Basic | Описание | Пример для .NET Framework |
---|---|---|---|
ToUpper | UCase | Изменяет регистр букв строки на верхний |
Dim Name, NewName As String Name = "Kim" NewName = Name.ToUpper 'NewName = "KIM" |
ToLower | LCase | Изменяет регистр букв строки на нижний |
Dim Name, NewName As String Name = "Kim" NewName = Name.ToLower 'NewName = "kim" |
Length | Len | Определяет число символов в строке |
Dim River As String Dim Size As Short River = "Mississippi" Size = River.Lengh 'Size = 11 |
Substring | Mid | Возвращает фиксированное число символов строки, начиная с заданной начальной позиции. (Примечание: первый элемент строки имеет индекс 0.) |
Dim Cols, Middle As String Cols = "First Second Third" Middle = Cols.SubString (6, 6) |
IndexOf | InStr | Ищет точку вхождения одной строки в другой, более длинной |
Dim Name As String Dim Start As Short Name = "Abraham" Start = Name.IndexOf("h") 'Start = 4 |
Trim | Trim | Удаляет из строки "ведущие" и последующие пробелы |
Dim Spacey, Trimmed As String Spacey = "Hello" Trimmed = Spacey.Trim 'Trimmed = "Hello" |
Remove | Удаляет символы из середины строки |
Dim RawStr, CleanStr As String RawStr = "Helli3333 there!" CleanStr = RawStr.Remove(5,3) 'CleanStr = "Hello there" |
|
Insert | Добавляет символы в середину строки |
DimOldstr, NewStr As String Oldstr = "Hi Felix" NewStr = OldStr.Insert(3, "there") 'NewStr = "Hi there Felix" |
|
StrComp | Сравнивает строки, не обращая внимания на регистр |
Dim str1 As Strng = "Soccer" Dim str2 As Strng = "SOCCER" Dim Match As Short Match = StrComp (str1, str2, CompareMethod.Text) 'Math = 0[string match] |
Сортировка текста
Прежде, чем Visual Basic сможет при сортировке сравнить один символ с другим, он должен преобразовать каждый из символов в число с помощью таблицы перевода, которая называется таблицей символов ASCII Character Set. ASCII - это сокращение от American Standard Code for Information Interchange (Американский стандартный код для обмена информацией). Большинство основных символов, которые вы можете отобразить на вашем компьютере, имеют различные коды ASCII. Эти коды включают базовый набор символов "пишущей машинки" (коды с 32 до 127) и специальные "управляющие" символы, такие, как табуляция, перевод строки и возврат каретки (коды с 0 до 31). Например, буква "a" (латинская) в нижнем регистре соответствует ASCII-коду 97, а буква "A" (тоже латинская) в верхнем регистре соответствует ASCII-коду 65. Поэтому Visual Basic при сортировке или выполнении других сравнений рассматривает эти два символа как различные.
В 1980-е годы IBM расширила ASCII кодами 128-255, которые содержали символы национальных языков, греческие символы, символы псевдографики и некоторые другие. ASCII и эти дополнительные символы обычно называются расширенной таблицей символов IBM.
Набор символов ASCII до сих пор является наиболее важным из изучаемых начинающими программистами набором кодов, но он не единственный. При расширении рынка компьютеров и прикладного программного обеспечения был разработан более сложный стандарт представления символов, который называется Unicode. Unicode может хранить до 65536 символов - вполне достаточно для того, чтобы представить традиционные символы набора ASCII и многочисленные международные символы. (На момент написания этого текста определено около 45000 символов.) Группа по поддержке этого стандарта создает набор символов Unicode и периодически добавляет в него новые символы. Microsoft Windows NT, Windows 2000, Windows XP, Windows Server 2003 и Visual Basic .NET были специально разработаны с поддержкой наборов символов ASCII и Unicode.
В следующих разделах пойдет речь об использовании набора символов ASCII для обработки строк. Когда ваши приложения станут более сложными, и вы начнете планировать глобальную дистрибуцию вашего программного обеспечения, вам понадобится узнать больше о Unicode и других международных установках.