Лучший способ преобразовать файлы журнала (* .txt) в файлы, удобные для использования в сети (* .html, * .jsp и т. Д.)? - PullRequest
4 голосов
/ 12 марта 2010

У меня есть куча файлов журналов, которые являются чистым текстом. Вот пример одного ...

Overall Failures Log
SW Failures - 03.09.2010 - /logs/swfailures.txt - 23 errors - 24 warnings
HW Failures - 03.09.2010 - /logs/hwfailures.txt - 42 errors - 25 warnings
SW Failures - 03.10.2010 - /logs/swfailures.txt - 32 errors - 27 warnings
HW Failures - 03.10.2010 - /logs/hwfailures.txt - 11 errors - 31 warnings

Эти файлы могут быть довольно большими и содержать много другой информации. Я хотел бы создать HTML-файл из этого журнала, который добавит ссылки на ключевые части и позволит пользователю в результате открыть другие файлы журнала ...

SW Failures - 03.09.2010 - <a href="/logs/swfailures.txt">/logs/swfailures.txt</a> - 23 errors - 24 warnings

Это значительно упрощается, так как я хотел бы добавить еще много ссылок и других HTML-элементов. Мой вопрос - каков наилучший способ сделать это? Если файлы большие, я должен сгенерировать html перед тем, как передать его пользователю, или jsp подойдет? Должен ли я использовать Perl или другие скриптовые языки для этого? Каковы ваши мысли и опыт?

Ответы [ 4 ]

4 голосов
/ 12 марта 2010

Вот простой пример использования Perl's HTML :: Template :

#!/usr/bin/perl

use strict; use warnings;
use HTML::Template;

my $tmpl = HTML::Template->new(scalarref => \ <<EOTMPL
<!DOCTYPE HTML>
<html><head><title>HTMLized Log</title>
<style type="text/css">
#log li { font-family: "Courier New" }
.errors { background:yellow; color:red }
.warnings { background:#3cf; color:blue }
</style>
</head><body>
<ol id="log">
<TMPL_LOOP LOG>
<li><span class="type"><TMPL_VAR TYPE></span>
<span class="date"><TMPL_VAR DATE></span>
<a href="<TMPL_VAR FILE>"><TMPL_VAR FILE></a>
<span class="errors"><TMPL_VAR ERRORS></span>
<span class="warnings"><TMPL_VAR WARNINGS></span>
</li>
</TMPL_LOOP>
</ol></body></html>
EOTMPL
);

my @log;
my @fields = qw( TYPE DATE FILE ERRORS WARNINGS );

while ( my $entry = <DATA> ) {
    chomp $entry;
    last unless $entry =~ /\S/;
    my %entry;
    @entry{ @fields } = split / - /, $entry;
    push @log, \%entry;
}

$tmpl->param(LOG => \@log);
print $tmpl->output;

__DATA__
SW Failures - 03.09.2010 - /logs/swfailures.txt - 23 errors - 24 warnings
HW Failures - 03.09.2010 - /logs/hwfailures.txt - 42 errors - 25 warnings
SW Failures - 03.10.2010 - /logs/swfailures.txt - 32 errors - 27 warnings
HW Failures - 03.10.2010 - /logs/hwfailures.txt - 11 errors - 31 warnings
2 голосов
/ 12 марта 2010

Мне нравится awk из-за его автоматического разбора поля:

/failures.txt/ {
        $6="<a href=\"" $6 "\">" $6 "</a><br>"
}

{
        print
}
1 голос
/ 12 марта 2010

Я бы использовал регулярные выражения Python.

>>> import re
>>> a = re.compile(r'[SH]W Failures - \d\d.\d\d.\d\d\d\d - (.*) - \d+ errors -
\d+ warnings')
>>> str = 'SW Failures - 03.09.2010 - /logs/swfailures.txt - 23 errors - 24 warnings'  
>>> b = a.match(str)
>>> b
<_sre.SRE_Match object at 0x7ff34160>
>>> b.groups()
('/logs/swfailures.txt',)
>>> str.replace(b.group(1), '<a href="%s">%s</a>' % (b.group(1), b.group(1)))
'SW Failures - 03.09.2010 - <a href="/logs/swfailures.txt">/logs/swfailures.txt</a> - 23 errors - 24 warnings'
0 голосов
/ 12 марта 2010

pygmentize может обрабатывать некоторые форматы, хотя в большинстве случаев вам может потребоваться настроить пользовательский лексер.

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