TXT文件剔除冗余信息

简化问题

先尝试对一个txt文件中的内容进行操作:
文件中的内容按行读取,以空格为分隔符进行分割,将其存入vector容器中(vectorres)。另外创建一个vector容器(vectorkeywords),用来存放关键字,进行关键字匹配(ret[8]==keywords[i]?),即可达到提取有效信息和剔除冗余信息的目的。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <fstream>
#include <string>
#include<vector>
using namespace std;

void printValue(vector<string>&s)
{
	for (vector<string>::iterator it = s.begin(); it != s.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

vector<string> split(const string& str, const string& delim) {
	vector<string> res;
	if ("" == str) return res;
	//先将要切割的字符串从string类型转换为char*类型
	char * strs = new char[str.length() + 1]; //不要忘了
	strcpy(strs, str.c_str());

	char * d = new char[delim.length() + 1];
	strcpy(d, delim.c_str());

	char *p = strtok(strs, d);
	while (p) {
		string s = p; //分割得到的字符串转换为string类型
		res.push_back(s); //存入结果数组
		p = strtok(NULL, d);
	}

	return res;
}

int main()
{
	ifstream ifs("P0001.txt", ios::in);
	ofstream ofs;

	ofs.open("P0002.txt", ios::out);

	if(!ifs)
	{
	cerr<<"open error"<<endl;
	exit(1);
	}

	string s;
	int index = 0;

	while (getline(ifs, s))
	{
		//cout << s << endl;

		vector<string> res = split(s, " ");

		//printValue(res);

		/*if (index > 1)
		{
			cout << res[8] << endl;
		}*/

		//system("pause");

		vector<string> keywords;

		keywords.push_back("small-vehicle");
		keywords.push_back("large-vehicle");
		keywords.push_back("plane");
		keywords.push_back("ship");
		keywords.push_back("harbor");
		keywords.push_back("roundabout");
		keywords.push_back("bridge");
		keywords.push_back("helicopter");
		keywords.push_back("container-crane");

		if (index > 1) 
		{
			for (int i = 0; i < keywords.size(); i++)
			{
				if (res[8] == keywords[i])
				{
					//printValue(res);
					for (vector<string>::iterator it = res.begin(); it != res.end(); it++)
					{
						ofs << (*it) << " ";
					}
					ofs << endl;
				}
			}
		}
		else
		{
			//printValue(res);
			for (vector<string>::iterator it = res.begin(); it != res.end(); it++)
			{
				ofs << (*it) << " ";
			}
			ofs << endl;
		}
		//system("pause");

		index++;
	}

	ofs.close();

	system("pause");
	return 0;
}
//多了个换行符
//其次,需要解决批量的问题

下图是处理过后的对比图,红色部分为冗余信息,可以看出此番操作达到了提取有效信息和剔除冗余信息的目的。
错误信息被剔除

美中不足的是:新生成的txt文件多了一个空白行,但是应该不影响数据的后续操作吧?最后多了一个空行
接下来要考虑的就是批量的问题。

说实话,有些事情只有自己亲手做了才知道问题出在哪里。

提取几个新的知识盲点:

#define _CRT_SECURE_NO_WARNINGS

字符串分割操作,切记先将要切割的字符串从string类型转换为char*类型。

先用getline()函数读行,再用split()函数进行分割,将分割过后的字符串存入容器。(不得不说,这个split()函数真的很好用)

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值