文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» C/C++ » C++解析转换文件格式       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: C++解析转换文件格式  ( 查看:457  回复:10 )   
 该主题悬赏的160无忧币已被全部领完 
 
litingking
技术员  点击可查看详细


十二生肖之虎   射手座   行业勋章   技术勋章   诚信兄弟  
帖子 125
精华 0
无忧币 613
积分 238
阅读权限 30
注册日期 2007-8-3
最后登录 2008-9-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-8 17:54   标题:C++解析转换文件格式
上一帖 |
需求总共分为三部分:
分别把xml.html.doc三种文件转化为txt文件,在转化的过程中,需要保留如下信息:
标题  关键字  加粗的字   带颜色的字   斜体字  带下划线的字   
这些信息都用类似于HTML的围堵标签形式加到转化成的txt中去。其中对于网页格式的文件,需要在转化成txt时, 只提取其正文部分
用C++语言在VC6.0下开发


请给出具体的就解决方案

请在5月15日前回复我

先谢谢各位高手

[ 本帖最后由 litingking 于 2008-5-8 21:06 编辑 ]



【每日必读】头条新闻大扫荡
2008-5-8 17:541楼
[ 顶部 ]
 
hagejid
副版主  点击可查看详细


十二生肖之猴   金牛座   行业勋章   技术勋章   诚信兄弟  
帖子 405
精华 0
无忧币 2004
积分 491
阅读权限 140
注册日期 2007-4-3
最后登录 2008-9-7 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-9 14:26  该回复被 litingking 奖励 160 点无忧币
此回复于2008-05-21 08:18被 ribut9225 评为最佳答案

估计也不难,但我这种三脚猫是最怕这种麻烦的,楼上都说了用OLE来解决DOC问题。
我的想法就是DOC的文件格式我们不熟所以就很难转换,但如果有个简单的方法转成我们熟悉的格式呢,比如HTML。
我在网上找到JAVA的代码,修改一下应该可以吧,方法也就是类似WORD的另存为。


//------------------------------------------------------------------------------
//版权所有 (C) 浪潮集团商用系统有限公司  保留所有权利
//文件名称: wordtohtml           文件版本: 1.00.00
//作    者: 郭铸     作者邮箱:
[url=mailto:guozhu@langchao.com]guozhu@langchao.com[/url]  完成日期: 2004-10-20
//文件描述:
//其它描述:
//类 列 表:
//  wordtohtml: 将指定目录下面所有的doc文件转化为HTML并存储在相同目录下
//修改历史:
//  #   版本     修改日期    作者                 修改内容
//  ----------------------------------------------------------------------------
//  1   1.00.01  2004-10-14  作者姓名             修改内容描述
//  ----------------------------------------------------------------------------
//------------------------------------------------------------------------------

import com.jacob.com.*;
import com.jacob.activeX.*;
import java.io.*;
//取得指定目录下面所有的doc文件名称
public class wordtohtml
{
//------------------------------------------------------------------------------
//方法原型: change(String paths)
//功能描述: 将指定目录下面所有的doc文件转化为HTML并存储在相同目录下
//输入参数: String
//输出参数: 无
//返 回 值: 无
//其它说明: 递归
//------------------------------------------------------------------------------
public static void change(String paths, String savepaths)
{
   
  File d = new File(paths);
  //取得当前文件夹下所有文件和目录的列表
  File lists[] = d.listFiles();
  String pathss = new String("");
//对当前目录下面所有文件进行检索
  for(int i = 0; i
     boolean flag = false;
     
     try
     {
      app.setProperty("Visible", new Variant(false));
        //设置word不可见
      Object docs = app.getProperty("Documents").toDispatch();
      Object doc = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{inFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch();
       //打开word文件
      Dispatch.invoke(doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(8)}, new int[1]);
        //作为html格式保存到临时文件
      Variant f = new Variant(false);
      Dispatch.call(doc, "Close", f);
      flag = true;
     }
     catch (Exception e)
     {
      e.printStackTrace();
     }
     finally
     {
      app.invoke("Quit", new Variant[] {});
     }
     System.out.println("转化完毕!");
    }
   }
   else
   {
    pathss = paths;
    //进入下一级目录
    pathss = pathss + lists.getName() + "\\";   
    //递归遍历所有目录
    change(pathss, savepaths);
   }
  }
  
}
//------------------------------------------------------------------------------
//方法原型: main(String[] args)
//功能描述: main文件
//输入参数: 无
//输出参数: 无
//返 回 值: 无
//其它说明: 无
//------------------------------------------------------------------------------
  
public static void main(String[] args)
{
  
  String paths = new String("D:\\Work\\2004.10.8\\test system\\test01\\word\\");
  String savepaths = new String ("D:\\Work\\2004.10.8\\test system\\test01\\html\\");
  change(paths, savepaths);
}
}

其中import的jar包是一个开源的东东,网上搜索即得。
Dispatch.invoke(doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(8)}, new int[1]);
修改
Variant(8)},里面得参数即可将Word转化为各种类型。


关键是怎么把里边的转换的代码从JAVA转为VC的OLE。经过观察其中有些部分和下面代码类似。
一段Word编程的代码(基于OLE)

一·步骤准备(IDE: VC 60):
       在ClassWizard中,点击Automaiton选项卡,再点Add Class,再点From a type library。然后会弹出一个
对话框,你找到OFFICE的文件夹,选择MSWORD.OLB。之后会列出一堆类。你依次添加_Application,Documents,
_Document,Selections。当然,你还可以根据自己的需要添加更多的类。
二.变量声明:
     _Application     oWordApp;    //一个Word实例变量。
    Documents       oDocs;          //一个文档集合变量。
    _Document       oDoc;            //一个文档变量。
    Selection          oSel;             //一个选择内容变量。
    COleVariant vTrue((short)TRUE),        
        vFalse((short)FALSE),        
        vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR));//一些使用参数变量,具体意义不懂,还请高手指点
三.具体步骤:
   1.oWordApp.CreateDispatch("Word.Application", NULL);  //如果此调用成功,回在任务管理器中增加一个WINWORD.exe的进程。
   2.oDocs=oWordApp.GetDocuments();     //获得当前进程的文档集合
      oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);      //由该集合创建一个新文档
   3.oSel=oWordApp.GetSelection();     //获得当前进程的选择内容。
      oSel.TypeText(“Text”);                    //向文档添加内容。
   4.oDoc.SaveAs(COleVariant(FileName),    //保存文档,以下参数会因为OFFICE版本的不同而改变
        COleVariant((short)0),
        vFalse, COleVariant(""), vTrue, COleVariant(""),
        vFalse, vFalse, vFalse, vFalse, vFalse,vFalse, vFalse, vFalse, vFalse, vFalse);
   5.释放资源
    oDoc.Close(vOpt, vOpt, vOpt);
    oDoc.ReleaseDispatch();
    oWordApp.SetVisible(TRUE);
    oDocs.ReleaseDispatch();
    oWordApp.Quit(vOpt, vOpt, vOpt);
    oWordApp.ReleaseDispatch();
四.总结:
    1.参考资料:http://www.vckbase.com/document/viewdoc/?id=1186
    2.在SaveAs的时候会出现和现有word进程相冲突的情况,具体表现为:“Word无法保存此文件,它在别处已被
       打开。。。。。”现在还未找到比较好的解决方法。望高手指教。
    3.如果不清楚Word编程需要使用哪些函数,可以使用Word的宏录制,来查看操作的VB代码,然后反过来去推理
      
以上就是我想的方法,具体实现是什么样的我就不去做了,本人很懒,呵呵~~



C到底该不该学,看看这个就明白
2008-5-9 14:262楼
[ 顶部 ]
 
queniao
副版主  点击可查看详细



十二生肖之虎   天秤座   行业勋章   技术勋章   诚信兄弟  
帖子 614
精华 2
无忧币 2529
积分 1032
阅读权限 140
注册日期 2006-4-2
最后登录 2008-9-1 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-5-9 14:26 
xml html 都好整 ,只要规则明晰 就行   doc 比较麻烦,要使用OLE来操作 烦



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-9 14:263楼
[ 顶部 ]
 
litingking
技术员  点击可查看详细


十二生肖之虎   射手座   行业勋章   技术勋章   诚信兄弟  
帖子 125
精华 0
无忧币 613
积分 238
阅读权限 30
注册日期 2007-8-3
最后登录 2008-9-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-10 10:12   标题:回复 #2 queniao 的帖子

请问能否详细点呢  具体的方法有吗 谢谢



【每日必读】头条新闻大扫荡
2008-5-10 10:124楼
[ 顶部 ]
 
zhoujingxzf
技术员  点击可查看详细



帖子 625
精华 0
无忧币 -1
积分 619
阅读权限 30
注册日期 2007-10-21
最后登录 2008-8-1 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-13 08:11 
学习,学习,天天向上



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-13 08:115楼
[ 顶部 ]
 
675508756
新新人类  点击可查看详细



帖子 39
精华 0
无忧币 52
积分 63
阅读权限 20
注册日期 2008-3-3
最后登录 2008-6-17 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-13 22:52 
高手啊
学习中啊



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-13 22:526楼
[ 顶部 ]
 
litingking
技术员  点击可查看详细


十二生肖之虎   射手座   行业勋章   技术勋章   诚信兄弟  
帖子 125
精华 0
无忧币 613
积分 238
阅读权限 30
注册日期 2007-8-3
最后登录 2008-9-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-16 11:39   标题:回复 #4 hagejid 的帖子

如何实现把doc转化成xml,转化出来的xml与一般的xml有什么区别, 最好能有具体实现
单行扫描,判断每行正文和标签的密度从而确定是正文还是相关链接,但是单行扫描上一行的标签如何继承下来, 一般的字体,颜色,下划线等信息如何提取?一般都会出现在哪些标签里面?

能否再解释下



【每日必读】头条新闻大扫荡
2008-5-16 11:397楼
[ 顶部 ]
 
hagejid
副版主  点击可查看详细


十二生肖之猴   金牛座   行业勋章   技术勋章   诚信兄弟  
帖子 405
精华 0
无忧币 2004
积分 491
阅读权限 140
注册日期 2007-4-3
最后登录 2008-9-7 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-16 15:22 
SORRY,我对这部分不熟帮不了忙,而且本人失业中,正忙着找工作,所以时间不多啊.



C到底该不该学,看看这个就明白
2008-5-16 15:228楼
[ 顶部 ]
 
litingking
技术员  点击可查看详细


十二生肖之虎   射手座   行业勋章   技术勋章   诚信兄弟  
帖子 125
精华 0
无忧币 613
积分 238
阅读权限 30
注册日期 2007-8-3
最后登录 2008-9-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-16 18:04   标题:回复 #8 hagejid 的帖子

还是很感谢你



【每日必读】头条新闻大扫荡
2008-5-16 18:049楼
[ 顶部 ]
 
vivamay
新新人类  点击可查看详细



帖子 105
精华 0
无忧币 141
积分 118
阅读权限 20
注册日期 2008-5-5
最后登录 2008-9-2 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-19 18:31 
学习了,谢谢



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-5-19 18:3110楼
[ 顶部 ]
 
lieutenant_y
新新人类  点击可查看详细



帖子 11
精华 0
无忧币 -2
积分 5
阅读权限 20
注册日期 2008-8-10
最后登录 2008-8-10 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-8-10 14:47 
高手



网络虽虚拟,技术无边界,来看看大家“真面目”!
2008-8-10 14:4711楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号