|
Программирование >> Обработка исключительных ситуаций
Регулярные выражения 363 Другие версии метода позволяют задавать любые действия по замене с помощью делегата MatchEvaluator, который вызывается для каждого вхождения фрагмента, совпавшего с заданным регулярным выражением. ПРИМЕЧАНИЕ- Помимо классов Regex и Match в пространстве имен System.Text.RegularExpressions определены вспомогательные классы, например, класс Capture - фрагмент, совпавший с подв1ражением в круглгх скобках; класс CaptureCol 1 ecti on - коллекция фрагментов, совпавших со всеми подвыражениями в текущей группе; класс Group содержит коллекцию Capture для текущего совпадения с регулярным выражением и т. д. 8 качестве более реального примера применения регулярных выражений рассмотрим программу анализа файла журнала веб-сервера. Это текстовый файл, каждая строка которого содержит информацию об одном соединении с сервером. Четыре строки файла приведены ниже: ppp-48.pool-113.spbnit.ru - - [31/Мау/2002:02:08:32 +0400] G / НР/1.1 .200 2434 http: www.price.ru/bin/price/rmlnfo f?d=10922&where=01&base=2 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) 81.24.130.7 - - [31/May/2002:08:13:17 +0400] G /swf/menu.swf HTTP/1.r~200 4682 - Mozilla/4.0 (compatible; MSIE 5.01; Windows 98) 81.24.130.7 - - [31/May/2002:08:13:17 +0400] G /swf/header.swf HTTP/1.1 200 21244 - Mozilla/4.0 (compatible; MSIE 5.01; Windows 98) gate.solvo.ru - - [31/May/2002:10:43:03 +0400] GET / HTTP/1.0 200 2422 http: www.price.ru,/bin/price/rminfo f?lid=10922&where 0I&base=l Mozilla/4.0 (compatible; MSIE 5.0: Windows NT; DigExt) Подобные файлы могут иметь весьма значительный объем, поэтому составление итогового отчета в удобном для восприятия формате имеет важное значение. Если рассматривать каждую строку файла как совокупность полей, разделенных пробелами, то поле номер 0 содержит адрес, с которого выполнялось соединение с сервером, поле номер 5 - операцию (GET при загрузке информации), поле 8 - признак успешности выполнения операции (200 - успешно) и, наконец, поле 9 - количество переданных байтов. Приведенная в листинге 15.6 программа формирует в формате HTML итоговый отчет, содержащий таблицу адресов, с которых выполнялось обращение к серверу, и суммарное количество переданных байтов для каждого адреса. Листинг 15.6. Анализ журнала веб-сервера using System; using System.10; usi ng System.Col 1ecti ons.Generi с; using System.Text.RegularExpressions: public class Test { public static void MainO продолжение & Глава 15. Дополнительные средства С# Листинг 15.6 (продолжение) new StreamReaderC accessjog ); new StreamWriterC report.htm ): new RegexC GET ); new RegexC ); StreamReader f StreamWriter w Regex get Regex г String s. entry; int value: string[] items = new string[40]: Dictionary<string. int> table = new Dictionary<string. int>(); while ( (s = f.ReadLineO ) != null ) { items = r.Sp1it( s ): if ( get.IsMatchC items[5] ) itenis[8] = 200 ) { entry = itemsCO]: value - int.ParseC items[9] ): if С table.ContainsKey( entry ) ) table[entry] += value; else tableCentry] = value; f.CloseO: w.WriteC <htmlxhead><title> Report </title></head><body> + <tab1e border =1 <trxtd> Computer <td> Bytes </tr> ); foreach ( string item in table.Keys ) w.Write{ <trxtd>{0}<td>{l)</tr> . item, tebletitem] ); W.WriteC </table></body> ); w. CloseO: Фрагмент результата работы программы показан на рис. 15.1. j?>block209-209-002. octetgroup.net j 162781 j J81.24.130.7 174756 jgate. sohro. ru {113692} [212.113.108.164 --12611991 Рис. 15.1. Фрагмент журнала веб-сервера Файл accessjog считывается построчно, каждая строка разбивается на поля, которые заносятся в массив items. Затем, если загрузка прошла успешно, о чем свидетельствуют значения GET и 2 0 0 полей 5 и 8, количество переданных байтов Документирование в формате XML 365 (поле 9) преобразуется в целое и заносится в хеш-таблицу по ключу, которым служит адрес, хранящийся в поле 0. Для формирования HTML-файла report.htm используются соответствующие теги. Файл можно просмотреть, например, с помощью Internet Explorer. Как видите, программа получилась весьма компактной за счет использования стандартных классов библиотеки .NET . Документирование в формате XML XML (extensible Markup Language) - это язык разметки текста. Разметкой является все, что не относится к содержанию, или, как модно говорить, контенту: структура документа, формат, вид и т. д. Разметка осуществляется с помощью тегов - управляющих элементов, заключенных в угловые скобки. Теги в XM L всегда парные: открывающий тег записывается перед размечаемым фрагментом, а закрывающий - после него. Закрывающий тег выглядит так же, как открывающий, но предваряется косой чертой, например: <summary> Класс для работы с регулярными выражениями </summary> В тегах могут присутствовать атрибуты - элементы вида = значение, уточ- няющие и дополняющие описание элемента. Язык XM L широко распространен в Интернете благодаря его универсальности и переносимости. Корпоративные приложения используют XML как основной формат для обмена данными. Строго говоря, XML является не языком, а системой правил для описания языков. ПРИМЕЧАНИ Е- Многие составляющие технологии .NET неразрывно связан! с XML, поэтому в пространстве имен System. Xml библиотеки .NET описано множество классов, поддерживающих XML. Объем и задача учебника не позволяют описать эти классы и технологии. Любой программный продукт требуется документировать. Соответствие версий документации и программы - серьезная проблема, которая решается в .NET встраиванием документации прямо в код программы с помощью комментариев и XML-тегов. Комментарии, используемые для построения файлов документации, начинаются с символов /и размещаются перед соответствующим элементом программы. Внутри комментариев записываются теги, относящиеся к комментируемому элементу - классу, методу,- параметру метода и т. п. Теги перечислены в табл. 15.5. Справедливости ради надо отметить, что аналогичная программа на языке Perl примерно в два раза короче.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |