2010-08-11 69 views
3

如果我给它一个带有特殊标签的.doc文件,比如[first_name],我该如何用“Clark”这样的东西替换它的所有匹配项?一个简单的二进制替换只适用于替换字符串是完全相同的长度。以编程方式搜索+替换.doc

Haskell,C和C++答案是最好的,但任何编译语言都可以。我还希望在没有外部库的情况下执行此操作,因为它必须部署在Windows和Linux上,并且跨平台依赖关系处理很麻烦。

总结...

.doc -> magic program -> .doc with strings replaced 

回答

4

您可以在Windows上使用Word COM组件(“Word.Application”)来打开文件,进行替换,保存文件并关闭它。但是,这仅仅是Windows而且可能是越野车。

你可以做的另一件事是使用OpenOffice.org命令行界面将文件转换为ODF格式,解压文件(ODF大多是压缩的XML),使用里面的文件进行替换,重新压缩文件,并将其重新转换为.doc格式。但是,OpenOffice.org并不总是正确地读取Word文件(尤其是如果有很多复杂的格式),并且可能会使分发变得更加困难(用户必须拥有OpenOffice.org或者必须将其与程序一起分发)。

此外,如果您有.docx格式的文件,则可以将其解压缩,进行替换并重新压缩。

+0

虽然使用docx看起来很有前途,但我并不一定在windows上。先生,您的好船先生! – 2010-08-11 19:09:23

+0

。在大多数使用.DOC的Word版本中,DOC可以相当优雅地转换为和来自.RTF。 RTF实际上是.DOC文件的汇编语言,小心可以在其中执行搜索和替换操作。我不知道一种简单的自动化方式来进行非正式转换,但它可能确实存在。 – RBerteig 2010-08-11 19:15:34

+0

RTF看起来很完美。感谢您的另一个伟大的建议!我想我会接受这个答案。 – 2010-08-11 19:23:02

1

您可能需要使用.NET编程(VB或C#)来创建的Word.Application一个对象,然后使用MS Word对象模型来进行处理您的文档。

+0

我不一定在windows上。 – 2010-08-11 19:10:21

+0

那么,鉴于M $的“开放性”,没有其他保证正确解析DOC文件的方法。 DOCX的建议很好,只要这些文件是由Word本身编写的。 Word很擅长转换自己的格式。 – 2010-08-11 19:14:19

+1

@Clark - 换句话说,你需要在Windows上。无论是生成文档还是使用COM对象,都无法在其他任何地方可靠地解析DOC。我不认为这是一件好事,我只是在报道我对现实的看法。 – 2010-08-11 19:20:46

2

首先阅读Word Document Specification

如果这还没有吓到你,那么你应该找到相当简单的方法来弄清楚如何读写它。这一定是可能的; Word在大部分时间都能做到。

+5

它吓坏了我。我已经看了它(600页),跑到SO尖叫。 – 2010-08-11 19:09:48

+1

+1。当它出现在这类问题的答案中时,我真的很喜欢这种干燥的幽默......特别是当它的事实准确时! – RBerteig 2010-08-12 01:09:07

0

为什么你想要使用C/C++/Haskell或其他编译语言?我对Haskell不太熟悉,但总的来说,我认为C不是执行文本处理的好语言。许多解释型语言(Perl,Python等)也具有强大的正则表达式库,适用于查找和替换短语。

就这样说,正如其他海报所指出的那样,您仍然必须处理.doc格式的偏心。