具体问题:如何去掉word文档内的空格、回车,只剩下文字标点。

forestassure 2003-08-13 09:29:14
思路:
1 空格 、 回车的 assci码
2 取读文件, 逐个比较 ,去掉
3 保存
可否,给点code
...全文
942 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
forestassure 2003-08-14
  • 打赏
  • 举报
回复

针对txt,我写:

void outputFile (const string& filename)
{
// open input file
ifstream file(filename.c_str());

// file opened?
if (! file) {
// NO, abort program
cerr << "can't open input file \"" << filename << "\""
<< endl;
exit(EXIT_FAILURE);
}

// copy file contents to cout
char c;
ofstream result("./result.txt");
// cout = result ;
char t;
while (file.get(c) ) {
if(c!=0x20 && c!=0x0d && c!=0x0a)
result.put(c);
}




}
寻开心 2003-08-13
  • 打赏
  • 举报
回复
ascii当中空格对应的是 0x20
回车和换行符号对应的是 0x0d 0x0a

读入一个buffer,判断其中的字符ASCII代码是否是上面的三个数值,如果是就过滤掉。

代码类似于:
CFile * fpIn, *fpOut;
char * pSource[1024];
char * pTarget[1024];
while (1)
{
int nSize = fpIn->Read(pSource, 1024);
int count = 0;
for ( int i=0; i<nSize; i++ )
{
if ( pSource[i] == 0x20 ) continue;
if ( pSource[i] == 0x0d ) continue;
if ( pSource[i] == 0x0a ) continue;
pTarget[count] = pSource[i];
count ++;
}
fpOut->Write(pTarget, count+1);
if ( nSize < 1024 ) break;
}

楼主的这种想法也许有问题,除非你保证单词之间肯定是由标点符号分隔的,一行最后的一个单词后面也有一个标点符号,否则处理的结果很容易把两个单词合并成了一个。
寻开心 2003-08-13
  • 打赏
  • 举报
回复

word文档
每看仔细

word文档是不能这样处理,TXT文档可以。
word文档太复杂,安全的做法应该是BlueSky2008的方法。
BlueSky2008 2003-08-13
  • 打赏
  • 举报
回复
呵呵,word文挡内可不见得是ascii字符。
我的建议是用word自带的VBScript,先看看有没有现成的函数,不行的话再自己写些宏代码,让word自己去处理字符的编码问题。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧