Как создать таблицу из неформатированных данных в браузере?

#javascript #formatting #tabular

#javascript #форматирование #табличный

Вопрос:

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

 Fri May 27 12:43:48 PDT 2011      user1 command1 1 2 3
Fri May 27 12:43:50 PDT 2011      user1 command2 abcdef   12  11
Fri May 27 12:44:00 PDT 2011      user1 command3
Fri May 27 12:45:12 PDT 2011      user1 command4
  

Я получаю доступ к этому файлу через свой браузер, чтобы проверить активность.

Поскольку файл представляет собой текстовый файл, его не очень легко прочитать.

Возможно ли это (с использованием Javascript?) как изменить файл после загрузки в браузере, чтобы временная метка, имя пользователя и команда отображались в трех столбцах таблицы, а исходный файл не был затронут?

Если это имеет значение, я использую Chrome 12, поэтому любое решение, специфичное для браузера, также будет работать.

Комментарии:

1. Как этот файл передается в браузер? Вероятно, более аккуратным решением будет разделить эти строки на стороне сервера и отправить таблицу в HTML-разметке.

2. рассматривался вариант использования <pre> или просто css white-space ?

3. Как насчет чего-то вроде этого ?

4. @Marcel: Я получаю доступ к файлу с помощью сервера apache.

Ответ №1:

Вы могли бы написать JAVASCRIPTLETET (ярлык javascript: URL в строке вашего браузера), который делает что-то вроде этого:

 (function() {
  var lines = document.body.innerHTML.split(/r?n/)
    , table = "<table>", line, i;
  for (i=0; i<lines.length; i  ) {
    line = lines[i].split(/s /);
    table  = "<tr>";
    table  = "<td>"   line.slice(0, 6).join(' ')   "</td>";
    table  = "<td>"   line[6]   "</td>";
    table  = "<td>"   line.slice(7).join(' ')   "</td>";
    table  = "</tr>";
  }
  table  = "</table>";
  document.body.innerHTML = table;
})();
  

Итак, просто сожмите все это в одну строку и сохраните свой ярлык как « javascript:[code here] «, и это должно сработать. Теоретически. Я не пробовал.