C语言如果提取文件中的汉字、中文标点、数字,?谢谢

pengfangxu8 2011-12-12 03:43:11
如题,将一个文本文件的中汉字、中文标点、数字提取出来,然后输入另一个文件中,比如输入2.txt,然后将这个文件中的汉字、中文标点、数字保存在3.txt中,谢谢各位大侠,谢谢了!小弟真不会,谢谢各位!
...全文
659 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pengfangxu8 的回复:]
追问,请问位有c或者c++ utf-8转换到gb2312的代码,函数之类的,谢谢各位哦!
[/Quote]
http://topic.csdn.net/u/20111214/16/b8ac67c1-423d-4b92-92b7-eb7700c0b268.html
pengfangxu8 2011-12-14
  • 打赏
  • 举报
回复
追问,请问位有c或者c++ utf-8转换到gb2312的代码,函数之类的,谢谢各位哦!
赵4老师 2011-12-13
  • 打赏
  • 举报
回复
//将2.txt这个文件中的汉字、中文标点、数字保存在3.txt中
//比如
//2.txt文件的内容是:
//hi,大家好!我们都是中国人,123我们一起加油!@#$%hgfhgf
//谢谢您帮我解决这个问题!谢谢您!非常感谢!thank you very much!
//那么经过处理后3.txt的内容是:
//大家好!我们都是中国人,123我们一起加油!
//谢谢您帮我解决这个问题!谢谢您!非常感谢!
#include <stdio.h>
#include <stdlib.h>
FILE *fi,*fo;
int c1,c2;
void main() {
fi=fopen("2.txt","rb");
if (NULL==fi) {
printf("Can not open file 2.txt!\n");
return;
}
fo=fopen("3.txt","w");
while (1) {
c1=fgetc(fi);
if (EOF==c1) break;
if ('0'<=c1 && c1<='9' || '\r'==c1 || '\n'==c1) {
fputc(c1,fo);
continue;
}
if (0x81u<=c1 && c1<=0xFEu) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fo);
fputc(c2,fo);
continue;
}
}
fcloseall();
}

utf8编码的话用记事本打开另存为ANSI编码即可。或者用convertz软件转换一下。
pengfangxu8 2011-12-13
  • 打赏
  • 举报
回复
谢谢您,我这儿是乱码,那些待提取的文件编码有gb2312和utf-8,可能是因为我没有表达清楚的原因,不是将数字标点文字分开存,是将源文件中的汉字、中文标点、数字、换行符保留,
比如,2.txt文件的内容是:

hi,大家好!我们都是中国人,123我们一起加油!@#¥%hgfhgf
谢谢您帮我解决这个问题!谢谢您!非常感谢!thank you very much!

那么经过处理后3.txt的内容是:

大家好!我们都是中国人,123我们一起加油!
谢谢您帮我解决这个问题!谢谢您!非常感谢!

需要说明的是2.txt的编码方式有可能是gb2312和utf-8,再麻烦您帮我解决下,谢谢您!
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
运行通过的版本
//将2.txt这个文件中的汉字、中文标点、数字保存在3.txt中
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0
#include <stdio.h>
#include <stdlib.h>
FILE *fi,*fh,*fb,*fs;
int c1,c2;
void main() {
fi=fopen("2.txt","rb");
fh=fopen("hz.txt","w");
fb=fopen("bd.txt","w");
fs=fopen("sz.txt","w");
while (1) {
c1=fgetc(fi);
if (EOF==c1) break;
if ('0'<=c1 && c1<='9') {
fputc(c1,fs);
continue;
}
if (0xA1u<=c1 && c1<=0xA9u) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fb);
fputc(c2,fb);
continue;
}
if (0x81u<=c1 && c1<=0xFEu) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fh);
fputc(c2,fh);
continue;
}
}
fprintf(fh,"\n");
fprintf(fb,"\n");
fprintf(fs,"\n");
fcloseall();
system("copy hz.txt+bd.txt+sz.txt 3.txt >NUL 2>NUL");
system("del hz.txt");
system("del bd.txt");
system("del sz.txt");
}
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
FILE *fi,*fh,*fb,fs;
应该为
FILE *fi,*fh,*fb,*fs;
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
没实际编译链接调试,不保证对,仅供参考:
//将2.txt这个文件中的汉字、中文标点、数字保存在3.txt中
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0
#include <stdio.h>
#include <stdlib.h>
FILE *fi,*fh,*fb,fs;
int c1,c2;
void main() {
fi=fopen("2.txt","rb");
fh=fopen("hz.txt","w");
fb=fopen("bd.txt","w");
fs=fopen("sz.txt","w");
while (1) {
c1=fgetc(fi);
if (EOF==c1) break;
if ('0'<=c1 && c1<='9') {
fputc(c1,fs);
continue;
}
if (0xA1u<=c1 && c1<=0xA9u) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fb);
fputc(c2,fb);
continue;
}
if (0x81u<=c1 && c1<=0xFEu) {
c2=fgetc(fi);
if (EOF==c2) break;
fputc(c1,fh);
fputc(c2,fh);
continue;
}
}
fprintf(fh,"\n");
fprintf(fb,"\n");
fprintf(fs,"\n");
fcloseall();
system("copy hz.txt+bd.txt+sz.txt 3.txt");
}
pengfangxu8 2011-12-12
  • 打赏
  • 举报
回复
谁能给这样的例子,给一个嘛,谢谢,不限语言,麻烦您们了!
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
//GBK汉字内码范围(不包括A1xx~A9xx的标点符号英文字母特殊符号等)
//区码 ,位码
//81-A0 ,40-7E 80-FE
//AA-AF ,40-7E 80-A0
//B0-D6 ,40-7E 80-FE
//D7 ,40-7E 80-F9
//D8-F7 ,40-7E 80-FE
//F8-FE ,40-7E 80-A0
Friso 是使用 c 语言开发的一款开源的高性能文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序, 例如:MySQL,PHP,并且提供了php5,php7,ocaml,lua的插件实现。源码无需修改就能在各种平台下编译使用,加载完 20 万的词条,内存占用稳定为 14.5M。 Friso核心功能: 文分词:mmseg算法 + Friso 独创的优化算法,四种切分模式。 关键字提取:基于textRank算法。 关键短语提取:基于textRank算法。 关键句子提取:基于textRank算法。 四种切分模式: 简易模式:FMM 算法,适合速度要求场合。 复杂模式- MMSEG 四种过滤算法,具有较高的岐义去除,分词准确率达到了98.41%。 检测模式:只返回词库已有的词条,很适合某些应用场合。(1.6.1版本开始)。 最多模式:细粒度切分,专为检索而生,除了文处理外(不具备文的人名,数字识别等智能功能)其他与复杂模式一致(英文,组合词等)。 功能特性: 1、同时支持对 UTF-8/GBK 编码的切分,支持 php5 和 php7 扩展和 sphinx token 插件。 2、支持自定义词库。在 dict 文件夹下,可以随便添加/删除/更改词库和词库词条,并且对词库进行了分类。 3、简体/繁体/简体混合支持,可以方便的针对简体,繁体或者简繁体切分。同时还可以以此实现简繁体的相互检索。 4、支持英/英混合词的识别(维护词库可以识别任何一种组合)。例如:卡拉ok,漂亮mm,c语言,IC卡,哆啦a梦。 5、很好的英文支持,英文标点组合词识别,例如c++,c#,电子邮件,网址,小数,百分数。 6、自定义保留标点:你可以自定义保留在切分结果的标点,这样可以识别出一些复杂的组合,例如:c++,k&r,code.google.com。 7、复杂英文切分的二次切分:默认 Friso 会保留数字和字母的原组合,开启此功能,可以进行二次切分提高检索的命率。例如:qq2013会被切分成:qq/ 2013/ qq2013。 8、支持阿拉伯数字/小数基本单字单位的识别,例如2012年,1.75米,5吨,120斤,38.6℃。 9、自动英文圆角/半角,大写/小写转换。 10、同义词匹配:自动文/英文同义词追加. (需要在 friso.ini 开启 friso.add_syn 选项)。 11、自动英文停止词过滤。(需要在 friso.ini 开启 friso.clr_stw 选项)。 12、多配置支持,安全的应用于多进程/多线程环境。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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