Протовис - работа с источником текста - PullRequest
0 голосов
/ 05 августа 2011

Допустим, у меня есть текстовый файл с такими строками:

[4/20/11 17:07:12:875 CEST] 00000059 FfdcProvider  W com.test.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on D:/Prgs/testing/WebSphere/AppServer/profiles/ProcCtr01/logs/ffdc/server1_3d203d20_11.04.20_17.07.12.8755227341908890183253.txt com.test.testserver.management.cmdframework.CmdNotificationListener 134
[4/20/11 17:07:27:609 CEST] 0000005d wle           E   CWLLG2229E: An exception occurred in an EJB call.  Error: Snapshot with ID Snapshot.8fdaaf3f-ce3f-426e-9347-3ac7e8a3863e not found.
                             com.lombardisoftware.core.TeamWorksException: Snapshot with ID Snapshot.8fdaaf3f-ce3f-426e-9347-3ac7e8a3863e not found.
   at com.lombardisoftware.server.ejb.persistence.CommonDAO.assertNotNull(CommonDAO.java:70)

Есть ли способ легко импортировать источник данных, такой как этот, в protovis, если нет, то какой самый простой способ разобрать это вформат JSON.Например, для первой записи может быть проанализирован так:

[
  {
 "Date": "4/20/11 17:07:12:875 CEST",
 "Status": "00000059",
 "Msg": "FfdcProvider  W com.test.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I",
 },
]

Спасибо, Дэвид

1 Ответ

0 голосов
/ 05 августа 2011

Сам Protovis не предлагает никаких утилит для синтаксического анализа текстовых файлов, поэтому вы можете выбрать следующие варианты:

  • Используйте Javascript для анализа текста в объекте, скорее всего с помощью регулярных выражений.* Предварительная обработка текста с использованием языка синтаксического анализа или утилиты по вашему выбору, экспорт файла JSON.

Выбор зависит от нескольких факторов:

  • Являются ли данные несколько статичными, или вы собираетесь запускать их в новом или динамическом файле каждый раз, когда смотрите на них?Со статическими данными, это может быть проще для предварительной обработки;с динамическими данными это может добавить раздражающий дополнительный шаг.

  • Сколько данных у вас есть?Парсинг 20K текстового файла в Javascript вполне подходит;Анализ файла размером 2 МБ будет очень медленным и приведет к зависанию браузера во время его работы (если вы не используете Workers).

  • Если требуется много обработки, вы бы предпочли поставитьчто загружается на сервере (с помощью серверного сценария для предварительной обработки) или на клиенте (с помощью браузера)?

Если вы хотите сделать это вJavascript, на основе предоставленного вами примера, вы можете сделать что-то вроде этого:

// Assumes var text = 'your text';
// use the utility of your choice to load your text file into the
// variable (e.g. jQuery.get()), or just paste it in.
var lines = text.split(/[\r\n\f]+/),
    // regex to match your log entry beginning
    patt = /^\[(\d\d?\/\d\d?\/\d\d? \d\d:\d\d:\d\d:\d{3} [A-Z]+)\] (\d{8})/,
    items = [],
    currentItem;

// loop through the lines in the file
lines.forEach(function(line) {
    // look for the beginning of a log entry
    var initialData = line.match(patt);
    if (initialData) {
        // start a new item, using the captured matches
        currentItem = {
            Date: initialData[1],
            Status: initialData[2],
            Msg: line.substr(initialData[0].length + 1)
        }
        items.push(currentItem);
    } else {
        // this is a continuation of the last item
        currentItem.Msg += "\n" + line;  
    }
});

// items now contains an array of objects with your data
...