2014-11-01 32 views
0

我有一些html文件,我需要对其执行自动处理,基本上是使用正则表达式替换,但也有一些更复杂的操作,如将选定的文本块从一个文件复制到另一个文件。使用Javascript处理磁盘文本处理

我想创建一系列脚本来让我做这个处理(它将需要在不同批次的文件上多次执行)。将Go用于此(将文件读入内存,正则表达式,保存到磁盘)将是微不足道的,但我是熟悉Go的项目的唯一成员。

Javascript是一个更无处不在,我确实有熟悉该语言的项目成员,所以它在这方面更合适。如果我以后不在,别人可以编辑脚本。

有没有简单的方法来写一些JS脚本来做磁盘文本处理?我正在寻找跨平台解决方案(OSX,Windows)。理想情况下,脚本一旦写入,就可以通过双击图标来执行脚本 - 在某些时候会涉及“不涉及计算机人员”。

此外,我希望能够做一些警告/消息框通知用户脚本的成功/失败。 (这可能是一个艰巨的任务,而且是次要的)

我已经看了:

  • Node.js的是,突然出现在我脑海的第一件事,是因为我知道它有文件系统访问工具,显然是正则表达式容量。但是我从来没有使用过Node,并且基于我读过的教程,对于这样简单的事情来说似乎是过度的。

  • 有一整个“JavaScript编译”工具,你可以通过使用谷歌搜索周围找到。有些不是跨平台的,有的看起来很老或者没有被主动维护,等等。没有一个引起我的注意,就像拿起一些JS脚本一样容易。

有什么想法?

回答

1

Node.js是一个简单的解决方案,通过它的框架,您可以创建或随后根据需要修改脚本。这样你就不会被别人的代码锁住。而且使用起来并不难。 下面是如何使用Node.js

http://www.sitepoint.com/accessing-the-file-system-in-node-js/

上accesing文件的快速教程这里是使用所谓的Cheerio节点模块的快速教程。它允许你使用“jquery like syntax”来访问html文件。你不需要使用正则表达式。

http://maxogden.com/scraping-with-node.html

我工作的一个项目,为客户一次,它需要解析直通几百HTML文件检查和更换基于某些指标分析某些图像文件。当时我并不熟悉节点,因此我阅读了一些教程并在大约一个小时内编写了脚本。

只要设置了Nodejs的路径,就可以在命令行上运行它。

+0

谢谢,其实这就是我想要的东西; Cheerio看起来很棒。这听起来像你的旧项目和我目前的项目是相似的。通过gui添加反馈给正在运行节点脚本的用户的任何内容? (消息框或类似的东西?) – 2014-11-02 02:57:34

1

一些提示:

你需要任何种类的DOM HTML解析器,不仅JS也不是特别JS。

您可以使用jTidyjSoup库(我已经使用过第二次)使用Java来做这件事。如果你知道像Netbeans这样的JS和IDE,它可以帮助你学习很简单的语言。所以可以很快做到这一点。

您可以使用PhantomJS创建一些作业文件并创建shell /批处理代码以在某些文件上运行它们。您可能需要为作业文件编写一个生成器(例如获取文件列表,为每个文件创建作业文件并运行它们)。

你可以使用Node.js,这是没有太多矫枉过正,我敢肯定任何解决方案都不是微不足道的。

您可以创建一个ETL以供处理,例如Pentaho ETL(将JS嵌入为两种脚本语言中的一种......但没有DOM解析器 - 对于那个,您需要使用一些Java和一些库以类似于this article的方式)。

你也可以通过使用Simple HTML DOM Parser这个PHP来做到这一点 - 这样你就可以在线(或在本地服务器上)创建一个服务,它接受这些html文件并抛出处理过的文件。

+0

谢谢,但我想你错过了部分:*“我确实有熟悉语言[javascript]的项目成员,所以它更适合这方面。”* I *选择* JS是因为我有团队成员知道它;我对Java解决方案(或者PHP)或者这个...... Pentaho的东西不感兴趣,它看起来像*(*)过度杀手。 PhantomJS看起来可以完成这项工作,但Node看起来要容易得多。不管怎么说,还是要谢谢你! – 2014-11-02 03:09:38

0

首先,我认为你低估了复杂性。声明

“这将是微不足道的使用Go这个(文件读入到内存, 正则表达式,保存到磁盘),但我这是 熟悉围棋项目的唯一成员。”

可能是false。用RegExp解析HTML只是一个坏主意。 (谷歌它,你会明白为什么)

第二,如果你可以在Go中使用RegExps轻松地编写代码,你可以轻松地在Javascript中写同样的东西。他们都支持RegExp和文件操作。如果您不确定Javascript/Node.js的详细信息,我建议您在Go中编写一些简单的解决方案,然后将其与同事一起翻译成Javascript。

由于Javascript是一种脚本语言,因此在Node.js中编写命令行工具很简单。

一些指针,让您开始

+0

*是的,虽然我走过正规影子的山谷,但我不会害怕克苏鲁。* :)别担心,我在跟踪;我不是试图用正则表达式本身解析* html;更像查找和替换。但是由jsdev提到的Cheerio模块将会有所帮助。感谢您的输入。 – 2014-11-02 03:02:48