c++如何输入一个名称,从txt文件输出名称所在行? 5
1个回答
展开全部
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
struct Line
{
int pos;
int len;
};
int GetLines(Line* pLine,FILE* fin);
void Write(Line* pLine,FILE* fin,FILE* fout,int line);
void main()
{
FILE* fa=fopen("A.txt","r");
FILE* fb=fopen("B.txt","w");
Line* pLine=new Line[1000];//最多1000行
int n=GetLines(pLine,fa);
int line;
cin>>line;
Write(pLine,fa,fb,line);
fclose(fa);
fclose(fb);
delete[] pLine;
}
void Write(Line* pLine,FILE* fin,FILE* fout,int line)
{
char* pBuf=new char[pLine[line].len];
fseek(fin,pLine[line].pos,SEEK_SET);//定位到文件第line行的位置
fread(pBuf,1,pLine[line].len,fin);//读入数据
fwrite(pBuf,1,pLine[line].len,fout);//写入数据
delete[] pBuf;
}
int GetLines(Line* pLine,FILE* fin)
{
char* pBuf=new char[10000];
int n=0;//行数
int len;
int count=0;
pLine[0].pos=0;//第一行
int i;
while(len=fread(pBuf,1,10000,fin))
{
for(i=0;i<len;i++)
{
if(pBuf[i]=='\n'/*换行符*/)
{
pLine[n].len=i+count*10000-pLine[n].pos;//第n行长度
pLine[++n].pos=i+count*10000;//第n+1行位置
}
}
count++;//读取文32313133353236313431303231363533e58685e5aeb931333262346533件次数
}
if(n>1)
pLine[n].len=i+count*10000-pLine[n-1].pos;//最后一行长度
delete[] pBuf;
return n;//返回行数
}
我重新改写了程序,现在这个程序可以读入很大的文件都没问题,每行的写数也可以很大。 注意:输入0表示是第一行。
#include <stdio.h>
#include <iostream>
using namespace std;
struct Line
{
int pos;
int len;
};
int GetLines(Line* pLine,FILE* fin);
void Write(Line* pLine,FILE* fin,FILE* fout,int line);
void main()
{
FILE* fa=fopen("A.txt","r");
FILE* fb=fopen("B.txt","w");
Line* pLine=new Line[1000];//最多1000行
int n=GetLines(pLine,fa);
int line;
cin>>line;
Write(pLine,fa,fb,line);
fclose(fa);
fclose(fb);
delete[] pLine;
}
void Write(Line* pLine,FILE* fin,FILE* fout,int line)
{
char* pBuf=new char[pLine[line].len];
fseek(fin,pLine[line].pos,SEEK_SET);//定位到文件第line行的位置
fread(pBuf,1,pLine[line].len,fin);//读入数据
fwrite(pBuf,1,pLine[line].len,fout);//写入数据
delete[] pBuf;
}
int GetLines(Line* pLine,FILE* fin)
{
char* pBuf=new char[10000];
int n=0;//行数
int len;
int count=0;
pLine[0].pos=0;//第一行
int i;
while(len=fread(pBuf,1,10000,fin))
{
for(i=0;i<len;i++)
{
if(pBuf[i]=='\n'/*换行符*/)
{
pLine[n].len=i+count*10000-pLine[n].pos;//第n行长度
pLine[++n].pos=i+count*10000;//第n+1行位置
}
}
count++;//读取文32313133353236313431303231363533e58685e5aeb931333262346533件次数
}
if(n>1)
pLine[n].len=i+count*10000-pLine[n-1].pos;//最后一行长度
delete[] pBuf;
return n;//返回行数
}
我重新改写了程序,现在这个程序可以读入很大的文件都没问题,每行的写数也可以很大。 注意:输入0表示是第一行。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询