Программирование >>  Обработка исключительных ситуаций 

1 ... 117 118 119 [ 120 ] 121 122 123 ... 142


Регулярные выражения 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 примерно в два раза короче.



1 ... 117 118 119 [ 120 ] 121 122 123 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика