免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: CDX0923

[文本处理] 求助大神,多文本统计 [复制链接]

论坛徽章:
0
发表于 2019-01-24 15:10 |显示全部楼层
以上是 C 版本。
因為 C 沒有 associative array,
所以用了 linked list 去儲存數据

寫得不好欢迎糾正

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
发表于 2019-01-24 19:09 |显示全部楼层
  1. BEGIN{
  2.     FS=","
  3. }
  4. FNR==1{
  5.     headline=$1","$2","$3","$4
  6.     filelist[fileindex++]=FILENAME
  7. }
  8. FNR>1{
  9.     a[$1","$2","$3","$4][FILENAME]++
  10. }
  11. END{
  12.     for(i in a){
  13.         str=i
  14.         for(j in filelist){
  15.             str=str","(+a[i][filelist[j]])
  16.         }
  17.         print str
  18.     }
  19. }
  20. $ awk -f test.awk 1.txt 2.txt 3.txt
  21. 亚洲,中国,河北,石家庄,1,0,1
  22. 亚洲,中国,辽宁,沈阳,1,1,0
  23. 亚洲,中国,陕西,西安,2,1,2
  24. 亚洲,中国,宁夏,银川,1,1,0
  25. 亚洲,中国,甘肃,兰州,0,0,1
  26. 亚洲,中国,河南,郑州,0,1,0
复制代码

论坛徽章:
0
发表于 2019-01-31 10:26 |显示全部楼层
本帖最后由 csccyab 于 2019-01-31 10:30 编辑

C++ 版本, 寫了這麼多, 不知樓主有沒有試



  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <iterator>
  5. #include <fstream>
  6. #include <regex>

  7. using namespace std;

  8. int main(int argc, char **argv){
  9.         map<string, int*> map1;
  10.         string line, firstline;
  11.         regex preg("(.+),.+");
  12.         smatch match;
  13.         map<string, int*>::iterator itr;
  14.         int linecount = 0;

  15.         for (int i=1; i<argc; ++i){
  16.                 linecount = 0;
  17.                 ifstream f(argv[i]);
  18.                 while (getline(f, line)){
  19.                         linecount++;
  20.                         if (linecount != 1){
  21.                                 if (regex_search(line, match, preg)){
  22.                                         if (map1.count(match.str(1)) == 0) {
  23.                                                 int *count = new int[argc-1]();
  24.                                                 map1[match.str(1)]=count;
  25.                                                 map1[match.str(1)][i-1]=1;
  26.                                         } else
  27.                                                 map1[match.str(1)][i-1]++;
  28.                                 }
  29.                         } else {
  30.                                 if (regex_search(line, match, preg))
  31.                                         firstline = match.str(1);
  32.                         }
  33.                 }
  34.                 f.close();
  35.         }

  36.         cout << firstline;
  37.         for (int i=1; i<argc; ++i)
  38.                 cout << "," << argv[i];
  39.         cout << endl;
  40.         for (itr=map1.begin(); itr!=map1.end(); itr++){
  41.                 cout << itr->first;
  42.                 for (int j=0; j<argc-1; j++)
  43.                         cout << "," << itr->second[j];
  44.                 cout << endl;
  45.         }
  46. }



复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP