假设我有一个带有行的文本文件:
[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",
},
]
谢谢大卫
答案 0 :(得分:0)
Protovis本身不提供任何用于解析文本文件的实用程序,因此您的选项是:
您选择哪个取决于几个因素:
数据是否有点静态,或者每次看到它时是否会在新文件或动态文件上运行它?使用静态数据,预处理可能最简单;对于动态数据,这可能会增加一个烦人的额外步骤。
你有多少数据?用Javascript解析一个20K的文本文件是完全没问题的;解析一个2MB的文件会非常慢,并且会导致浏览器在它工作时挂起(除非你使用Workers)。
如果涉及大量处理,您是宁愿将该负载放在服务器上(通过使用服务器端脚本进行预处理)还是放在客户端上(通过在浏览器中进行)? / p>
如果你想在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