Анализ файлов журнала в папке в ColdFusion - PullRequest
3 голосов
/ 18 мая 2010

Проблема в том, что существует папка ./log/, содержащая такие файлы, как:

jan2010.xml, feb2010.xml, mar2010.xml, jan2009.xml, feb2009.xml, mar2009.xml ...

каждый XML-файл будет выглядеть так:

<root><record name="bob" spend="20"></record>...(more records)</root>

Я хочу написать фрагмент кода ColdFusion (log.cfm), который просто анализирует эти XML-файлы. Для внешнего интерфейса я бы позволил пользователю выбрать год, а затем нажать кнопку «Отправить». Весь контент в этом году будет отображаться в отдельной таблице по месяцам. Каждая таблица показывает общую сумму денег, потраченных на каждого человека. как:

person   cost
bob      200
mike     300
Total    500

Спасибо.

Ответы [ 3 ]

2 голосов
/ 18 мая 2010

Краткий ответ: если ваш XML правильно отформатирован, вы можете использовать функцию XMLParse (), чтобы получить XML в объект данных CF.

Сергей отметил, что XMLParse может взять путь, поэтому вы можете просто прочитать файл непосредственно в него и присвоить результаты переменной.

Данные должны выглядеть как массив структур. Используйте CFDUMP на вашем объекте данных CF, чтобы просмотреть его и помочь разобраться.

0 голосов
/ 08 октября 2011

Конкретный пример:

<CFSET year = 2011 />
<CFDIRECTORY directory="#expandpath("log")#" action="list" sort="name" name="logfiles" filter="*#year#.xml" />
<CFOUTPUT query="logfiles">
  <CFSET singlelogfile = xmlparse(directory & "/" & name) />
  <CFSET records = XmlSearch(singlelogfile, "//record") />
  <table>
    <tr><td colspan="2">Month: #left(logfiles.name,3)#</td></tr>
    <CFLOOP array="#records#" index="record">
      <tr><td>#record.XmlAttributes.name#</td><td>#record.XmlAttributes.spend#</td></tr>
    </CFLOOP>
  </table>
</CFOUTPUT>

Конечно, вам нужно изменить, что год исходит из FORM-Scope, суммировать несколько записей для каждого человека и, возможно, (если вы можете это контролировать) изменить имя файла с журналов на 01-2011,02-2011,03 -2011, .. 12-2011, чтобы они правильно сортировались напрямую.

0 голосов
/ 19 мая 2010

Я настоятельно призываю вас проверить Microsoft Log Logser, если вы используете Windows. По сути, он предоставляет SQL-подобный интерфейс запросов для всех типов файлов журналов. Есть приложение под названием «Log Parser Lizard», которое предоставляет графический интерфейс для тестирования «запросов», а затем вы можете cfexecute logparser с запросами, которые вы придумали.

Не уверен, что есть эквивалент для Linux.

Если вы находитесь в Windows и хотите узнать больше, дайте мне знать. Я подключил его к задаче ANT, которая каждый вечер загружала файлы журналов, анализировал их, генерировал отчеты и т. Д. Он работал очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...