C++中怎么删除TXT文件中的指定内容?
例如:
一个TXT文件中包含:1 2 3 4 5 6 7 8 9 0
变量a从键盘得到一个值5
将TXT文件中的5直接删除,该怎么做?
尽量简单点,我说的简单点是容易看懂,呵呵!
另外,怎么将TXT中的内容以以下方式显示?
姓名:1
姓名:2
姓名:3
姓名:4
姓名:5
姓名:6
姓名:7
姓名:8
姓名:9
姓名:0
[解决办法]
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
string delet(string &s,int i); //该函数用于删除指定元素
//s参数为目标字符串 i为操作位置
/* 没有找到字符串合适的匹配函数来删除指定元素 */
int main()
{
string s2= "123456789 "; //目标文件
ofstream ofile1( "d:\\delet.txt "); //将目标文件放到D盘
ofile1 < <s2; //把目标文件 放到指定文件内
int k=0;
while(k <s2.size())
{
cout < < "姓名: " < <s2[k] < <endl; //输出目标文件内容
k++;
}
ofile1.close(); //关闭文件
ifstream ifile( "d:\\delet.txt "); //打开文件
string s= " ";
ifile> > s; //放入字符串内进操作 //现实操作对象
char c= '5 '; //待删除对象
int count=0;
while(s[count]!=c) //计算删除元素位置
++count;
cout < < "the pose of 5 is " < <count < <endl;
delet( s,count);
k=0; //调用函数将字符串内的元素删除
while(k <(s.size()-1))
/* 没有想到办法删除元素后把字符串的 size 改过来!! */
{
cout < < "姓名: " < <s[k] < <endl; //输出目标文件内容
k++;
}
ifile.close(); //关闭文件
ofstream ofile2( "d:\\delet.txt "); //写字符串
ofile2 < <s;
ofile2.close(); //关闭文件
system( "pause ");
return 0;
}
string delet(string &s,int num)
{
int size=s.size();
if(num> =0)
for(int i=num;i <size-1;i++ )
{
s[i]=s[i+1];
}
s[size-1]= ' ';
return s;
}
匆忙写出来的
希望有帮助
请大家提意见!!
[解决办法]
文本覆盖、插入、修改,简单的示例一下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char *insert = "EE,EE,EE, ", tmp[256]={0};
int pos, i;
/*test.txt文件内容:01,00,00,00,0E,00,00,00,00,00,00,E1,E2,00,00,00,00*/
fp = fopen( "test.txt ", "r+ ");
/*1、等长覆盖*/
fseek(fp, 12, 1);
fprintf(fp, "0F "); /*直接写入等长度的数据就可以完成覆盖*/
/*2、E2后插入“EE,EE,EE,” */
fseek(fp, 25, 1);
pos = ftell(fp); /*插入位置*/
fgets(tmp, 256, fp); /*把后面的数据缓存*/
fseek(fp, pos, 0); /*移动到插入位置*/
fprintf(fp, insert); /*插入,就是写入数据*/
fprintf(fp, tmp); /*把原来的数据再写回来, 完成*/
/*3、01读取后++两次,并重新写回文件*/
rewind(fp);
fscanf(fp, "%x ", &i); /*读取数据*/
i = i+2; /* +2 */
fseek(fp, -2, 1); /*调整指针*/
fprintf(fp, "%02x ", i); /*写文件*/
fclose(fp);
system( "PAUSE ");
return 0;
}
[解决办法]
#include <string>
#include <fstream>
#include <vector>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
ifstream ifile( "data.txt ");
vector <string> vec;
string i;
/*读取文件内容到 缓存中*/
while(ifile> > i)vec.push_back(i);
ifile.close();
vector <string> ::iterator it;
for(it=vec.begin(); it <vec.end(); it++) //按照指定格式输出查看
cout < < "姓名: " < <*it < <endl;
cout < <endl < < "请输入要删除内容: "; //输入删除内容
cin> > i;
for(it=vec.begin(); it <vec.end(); it++)
if(i == *it)vec.erase(it); //删除!
cout < < "完成删除,写入文件中······ " < <endl;
/*将删除后的剩余内容写到文件中*/
ofstream ofile( "data.txt ");
for(it=vec.begin(); it <vec.end(); it++)
ofile < <*it < <endl;
system( "PAUSE "); //OK
return 0;
}