Protovis - 处理文本源

可以说我有与行的文本文件,例如:Protovis - 处理文本源

[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",

},

]

谢谢,大卫

回答:

Protovis本身解析文本文件不提供任何公用设施,所以你的选择是:

  • 使用Javascript将文本解析为对象,很可能使用正则表达式。
  • 使用您选择的文本解析语言或实用程序预处理文本,导出JSON文件。

你的选择取决于以下几个因素:

  • 数据是否有点静态的,或者是你将要在新的或动态的文件中的每个你看它的时候运行呢?使用静态数据,预处理可能最容易;与动态数据,这可能会增加一个恼人的额外步骤。

  • 你有多少数据?用JavaScript解析一个20K的文本文件是完全正确的;解析2MB文件的速度会非常慢,并且会在浏览器工作时导致浏览器挂起(除非您使用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

以上是 Protovis - 处理文本源 的全部内容, 来源链接: utcz.com/qa/265458.html

回到顶部