c++修改或者删除txt中内容的某一行
不允许直接把全部读到数组里头,要直接在文件中更改或者删除。我现在可以找到我要改的内容在第多少行,而且我的每一行的长度都是固定的。现在应该怎么修改或者删除特定的那一行?求代...
不允许直接把全部读到数组里头,要直接在文件中更改或者删除。我现在可以找到我要改的内容在第多少行,而且我的每一行的长度都是固定的。现在应该怎么修改或者删除特定的那一行?
求代码。。。
txt的内容是
1 1 t 0 13 96 98 97
1 2 z 1 14 99 97 96
1 3 s 1 15 97 95 94
1 4 a 0 13 97 96 95
2 5 b 1 14 66 77 88
解决了我会加分的,先给100
快。。。。很急 展开
求代码。。。
txt的内容是
1 1 t 0 13 96 98 97
1 2 z 1 14 99 97 96
1 3 s 1 15 97 95 94
1 4 a 0 13 97 96 95
2 5 b 1 14 66 77 88
解决了我会加分的,先给100
快。。。。很急 展开
4个回答
展开全部
代码:
#include <iostream>
#include <string>
#include <fstream>
#include <ostream>
#include <cstdlib>
using namespace std;
void main()
{
fstream file("in.txt");
string line;
int n,count=0;
ofstream outfile("in2.txt",ios::out|ios::trunc);
cout<<"Please input the line number you want to del:"<<endl;
cin>>n;
while(!file.eof())
{
扩展资料:
C++的运算符(运算符是一种告诉编译器执行特答定的数学或逻辑操作的符号。C++ 内置了丰富的运算符)具体以下:
C++里的作用域分解运算符,“比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如:
1、算术运算符。
2、关系运算符。
3、逻辑运算符。
4、位运算符。
展开全部
这段代码可以把你的文件的第二行改写了,你可以照猫画虎。可续问。
#include "stdafx.h"
#include <fstream.h>
void main(void){
fstream ofile("a.txt",ios::in | ios::out);
ofile.seekp(21,ios::beg);
ofile.write("1 2 3 4 5 6 7 8 9 0",19);
}
文件已事先保在存同目录下a.txt中。
#include "stdafx.h"
#include <fstream.h>
void main(void){
fstream ofile("a.txt",ios::in | ios::out);
ofile.seekp(21,ios::beg);
ofile.write("1 2 3 4 5 6 7 8 9 0",19);
}
文件已事先保在存同目录下a.txt中。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面是实现你输入行数,删除对应行
主要思想就是新开一个文件,保存除了你要删除行的其它行的数据,再存回原文件
再删除这个中间新开的文件,修改内容就简单了
#include <iostream>
#include <string>
#include <fstream>
#include <ostream>
#include <cstdlib>
using namespace std;
void main()
{
fstream file("in.txt");
string line;
int n,count=0;
ofstream outfile("in2.txt",ios::out|ios::trunc);
cout<<"Please input the line number you want to del:"<<endl;
cin>>n;
while(!file.eof())
{
getline(file,line);
if(count!=n-1)//如果要修改内容就在这修改line的内容,再存到文件中就行了
outfile<<line<<endl;
count++;
}
outfile.close();
file.close();
ofstream outfile1("in.txt",ios::out|ios::trunc);
fstream file1("in2.txt");
while(!file1.eof())
{
getline(file1,line);
outfile1<<line<<endl;
}
outfile1.close();
file1.close();
system("del in2.txt");//删除中间文件
}
主要思想就是新开一个文件,保存除了你要删除行的其它行的数据,再存回原文件
再删除这个中间新开的文件,修改内容就简单了
#include <iostream>
#include <string>
#include <fstream>
#include <ostream>
#include <cstdlib>
using namespace std;
void main()
{
fstream file("in.txt");
string line;
int n,count=0;
ofstream outfile("in2.txt",ios::out|ios::trunc);
cout<<"Please input the line number you want to del:"<<endl;
cin>>n;
while(!file.eof())
{
getline(file,line);
if(count!=n-1)//如果要修改内容就在这修改line的内容,再存到文件中就行了
outfile<<line<<endl;
count++;
}
outfile.close();
file.close();
ofstream outfile1("in.txt",ios::out|ios::trunc);
fstream file1("in2.txt");
while(!file1.eof())
{
getline(file1,line);
outfile1<<line<<endl;
}
outfile1.close();
file1.close();
system("del in2.txt");//删除中间文件
}
追问
你的方法我在用!英雄所见略同啊。最后一个问题。。。你注释的“//如果要修改内容就在这修改line的内容,再存到文件中就行了”那个地方,我直接手动输入一整行同类型的数据,我的方法是
char x[10000];
gets(x);
file<<x<<endl;
但是总是放不到文件里啊咋办
追答
他是个string,所以你要加一句,转成string对象
line=x;
file<<line<<endl;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接在文件中改的
#include <windows.h>
#include <stdio.h>
//每行19个字符,加上回车和换行
#define LINE_LEN (21)
void DeleteLine(HANDLE hFile, int line)
{
char buf[LINE_LEN];
for(;;) {
//读取下一行
DWORD readLen = 0;
SetFilePointer(hFile, (line + 1) * LINE_LEN, 0, FILE_BEGIN);
ReadFile(hFile, buf, LINE_LEN, &readLen, 0);
if (readLen != LINE_LEN) break;
//写入当前行
DWORD writeLen = 0;
SetFilePointer(hFile, line * LINE_LEN, 0, FILE_BEGIN);
WriteFile(hFile, buf, LINE_LEN, &writeLen, 0);
++line;
}
//删除最后一行
SetFilePointer(hFile, line * LINE_LEN, 0, FILE_BEGIN);
SetEndOfFile(hFile);
}
void OverwriteLine(HANDLE hFile, int line, char* data)
{
DWORD writeLen = 0;
int dataLen = lstrlenA(data);
if (dataLen > LINE_LEN) return;
if (dataLen < LINE_LEN - 2) return;
SetFilePointer(hFile, line * LINE_LEN, 0, FILE_BEGIN);
WriteFile(hFile, data, dataLen, &writeLen, 0);
}
int main()
{
HANDLE hFile = CreateFileA("你的文件.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hFile == INVALID_HANDLE_VALUE) {
puts("打开文件失败");
return 1;
}
//覆盖第一行
OverwriteLine(hFile, 0, "9 9 x 9 99 99 88 77");
//删除第三行
DeleteLine(hFile, 2);
//关闭文件
CloseHandle(hFile);
}
如果你的文件换行只有一个换行符没有回车符,那么把LINE_LEN改为20
因为删除的时候要修改文件大小,我不知道标准库中如何修改文件大小,所以用api实现了
有风险,使用前请先备份好你那个txt……万一改坏了(
#include <windows.h>
#include <stdio.h>
//每行19个字符,加上回车和换行
#define LINE_LEN (21)
void DeleteLine(HANDLE hFile, int line)
{
char buf[LINE_LEN];
for(;;) {
//读取下一行
DWORD readLen = 0;
SetFilePointer(hFile, (line + 1) * LINE_LEN, 0, FILE_BEGIN);
ReadFile(hFile, buf, LINE_LEN, &readLen, 0);
if (readLen != LINE_LEN) break;
//写入当前行
DWORD writeLen = 0;
SetFilePointer(hFile, line * LINE_LEN, 0, FILE_BEGIN);
WriteFile(hFile, buf, LINE_LEN, &writeLen, 0);
++line;
}
//删除最后一行
SetFilePointer(hFile, line * LINE_LEN, 0, FILE_BEGIN);
SetEndOfFile(hFile);
}
void OverwriteLine(HANDLE hFile, int line, char* data)
{
DWORD writeLen = 0;
int dataLen = lstrlenA(data);
if (dataLen > LINE_LEN) return;
if (dataLen < LINE_LEN - 2) return;
SetFilePointer(hFile, line * LINE_LEN, 0, FILE_BEGIN);
WriteFile(hFile, data, dataLen, &writeLen, 0);
}
int main()
{
HANDLE hFile = CreateFileA("你的文件.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hFile == INVALID_HANDLE_VALUE) {
puts("打开文件失败");
return 1;
}
//覆盖第一行
OverwriteLine(hFile, 0, "9 9 x 9 99 99 88 77");
//删除第三行
DeleteLine(hFile, 2);
//关闭文件
CloseHandle(hFile);
}
如果你的文件换行只有一个换行符没有回车符,那么把LINE_LEN改为20
因为删除的时候要修改文件大小,我不知道标准库中如何修改文件大小,所以用api实现了
有风险,使用前请先备份好你那个txt……万一改坏了(
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询