c++ 文本处理

1、使用sstream版本

(1)功能:截取第一列为1以后的数据,如下图,截取第5行(包括第5行)以后的数据,前面4行数据丢弃。



(2)代码:textProc.cc

#include <iostream>
#include <fstream>
#include <sstream>
#include <string> using namespace std; int main(int argc, char *argv[]) {// *argv[] 是一个指针数组,也就是一个字符串数组。
string dir = "/data/"; string old_file = dir + argv[1] + "/input/txdsp_input_old.dat";
string gen_file = dir + argv[1] + "/input/txdsp_input.dat";
string cmd = "mv ";
cmd = cmd + gen_file + " " + old_file; if(system(cmd.c_str()) == 0) {
cout<<"file move ok !"<<endl;
} else {
cout<<"file move failed !"<<endl;
} ifstream is(old_file);
ofstream os(gen_file);
istringstream iss;
string line, word; while(getline(is, line)) {
iss.str(line); // 刷新string流中的字符串
iss.clear(); // 清除string流中的状态,如果string流读完了failbit会拉起,导致刷新了新数据也不能读取。
iss>>word; // 利用string流一个一个单词的读取, 这里只读一个帧头标识。 if(word == "1") { // 将找到帧头后的所以数据都输出。
os<<line<<endl;
break;
}
} while(getline(is, line)) {
os<<line<<endl;
} os.close();
is.close();
return 0;
}

2、regex版本

#include <iostream>
#include <fstream>
#include <regex>
#include <string> using namespace std; int main(int argc, char *argv[]) {// *argv[] 是一个指针数组,也就是一个字符串数组。
string dir = "/data/"; string old_file = dir + argv[1] + "/input/txdsp_input_old.dat";
string gen_file = dir + argv[1] + "/input/txdsp_input.dat";
string cmd = "mv ";
cmd = cmd + gen_file + " " + old_file; if(system(cmd.c_str()) == 0) {
cout<<"file move ok !"<<endl;
} else {
cout<<"file move failed !"<<endl;
} ifstream is(old_file);
ofstream os(gen_file);
string line;
smatch results; regex re("^1.*");
while(getline(is, line)) {
if(regex_search(line, results, re)) { // 将找到帧头后的所以数据都输出。
os<<line<<endl;
break;
}
} while(getline(is, line)) {
os<<line<<endl;
} regex re2("^tel:(\\d{11}),addr:(\\w+)"); // 正则表达式相对于python的要多加一个反斜杠“\”,应该\在C是特殊字符
string str = "tel:15688886666,addr:sichuan";
regex_search(str, results, re2); //传给regex_search的字符串可以是string,char,wchar等4种类型,对应的使用smatch,cmatch、wcmatch等4中类型。为了简单,一般只使用string+smatch。
cout<<results.str()<<endl;           //打印整个str
cout<<results.str(1)<<endl;       //打印第一个匹配的括号(\\d{11})
cout<<results.str(2)<<endl;     //打印第二个匹配的括号(\\w+) os.close();
is.close();
return 0;
}

输出:

c++ 文本处理的更多相关文章

  1. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  2. 07.LoT.UI 前后台通用框架分解系列之——轻巧的文本编辑器

    LoT.UI汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui 上次说的是强大的百度编辑器 http://www.cnblogs.com/d ...

  3. HTML5 语义元素(二)文本内容

    上一篇介绍的是关于页面结构方面的语义元素,本篇介绍文本内容方面,包含:<bdi>.<details>.<summary>.<mark>.<outp ...

  4. 富文本编辑器Simditor的简易使用

    最近打算自己做一个博客系统,并不打算使用帝国cms或者wordpress之类的做后台管理!自己处于学习阶段也就想把从前台到后台一起谢了.好了,废话不多说了,先来看看富文本编辑器SimDitor,这里是 ...

  5. 【NLP】干货!Python NLTK结合stanford NLP工具包进行文本处理

    干货!详述Python NLTK下如何使用stanford NLP工具包 作者:白宁超 2016年11月6日19:28:43 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的 ...

  6. 【NLP】Python NLTK处理原始文本

    Python NLTK 处理原始文本 作者:白宁超 2016年11月8日22:45:44 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集的大量公开 ...

  7. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

  8. NLP点滴——文本相似度

    [TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...

  9. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  10. CSS 3学习——文本效果和@font-face

    文本效果 关于文本效果,这里仅仅记录得到大多数浏览器支持的几个属性,分别是: text-overflow text-shadow word-break word-wrap text-overflow ...

随机推荐

  1. java中的spi

    JAVA中的SPI机制 1.SPI简介 SPI机制(Service Provider Interface)其实源自服务提供者框架(Service Provider Framework),是一种将服务接 ...

  2. 学习笔记--我的第一个Java程序

    我的第一个Java程序 // pubilc 表示公开的 // class 表示定义一个类 // HelloWorld 表示一个类名 public class HelloWorld { // 表示定义一 ...

  3. for循环题目记录

    1.求1000以内的完数 /** * 一个数如果恰好等于它的因子之和,这个数就是完数,找出1000内的所有完数 * @author 努力Coding * @version * @data */ pub ...

  4. POJ2115C Looooops

    http://poj.org/problem?id=2115 k位储存特点,一旦溢出,那么就到第二个循环开始返回0重新计数.问题实际转化成a+cx=b(mod 2^k)跑多少圈能够重合.因为是k位无符 ...

  5. Go 中实现用户的每日限额(比如一天只能领三次福利)

    如果你写一个 bug 管理系统,用了这个 PeriodLimit 你就可以限制每个测试人员每天只能给你提一个 bug.工作是不是就轻松很多了? 如今微服务架构大行其道本质原因是因为要降低系统的整体复杂 ...

  6. STM32 EXTI(外部中断)

    一.EXTI 简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20个中断/事件线.每个中断/事件线都对应有一个边沿检测器 ...

  7. leetcode 645. 错误的集合

    问题描述 集合 S 包含从1到 n 的整数.不幸的是,因为数据错误,导致集合里面某一个元素复制了成了集合里面的另外一个元素的值,导致集合丢失了一个整数并且有一个元素重复. 给定一个数组 nums 代表 ...

  8. 关于Linux安装中NAT模式和桥接模式的区别详解(转载)

    1.一般我们在创建一个Linux虚拟机时候,会面临三个网络配置选择: 桥接模式.nat模式.host-only模式(主机模式,这个模式用得少,就不介绍了) 2.NAT模式: 所谓nat模式,就是虚拟系 ...

  9. Vue 之 浏览本地图片功能

      template <input type="file" ref="input_file" @change="fileChange" ...

  10. python编写购物车新写法

    用另一种方式完成购物车的功能实现 #!/usr/bin/python zijin = input("请输入资金:") if zijin.isdigit(): zijin = int ...