C语言如何读取文件中指定的某一段

现在有个TXT文件有ABC三段如何读取B段B段开头为B结尾为ENDB... 现在有个TXT文件 有 A B C三段 如何读取B段 B段开头为B 结尾为END B 展开
 我来答
智者总要千虑
高粉答主

2019-09-10 · 说的都是干货,快来关注
知道顶级答主
回答量:7.9万
采纳率:88%
帮助的人:1.3亿
展开全部
使用fread函数读取指定长度的字符串,即使包含\n也会被读取,可以首先使用fseek定位到文件结尾,然后ftell函数返回的值就是文件的大小,这样就可以用循环多次读取文件,直到读取所有内容

FILE *file = NULL;
char szFile[1025] = {0};
int nHadRead = 0;
file = fopen( "file.txt", "r+");
if ( file == NULL )
return;

fseek( file, 0, SEEK_END ); //定位到文件尾
int nLen = ftell( file ); //获取当前位置,即文件长度
fseek( file 0, SEEK_SET ); //重新定位到文件开头,准备开始读
while ( nHadRead < nLen )
{
int nRead = nLen - nHadRead >1024 ? 1024 : nLen - nHadRead; //如果剩余小于1024字节,则读剩余字节,否则每次读取1024字节。
int nTmp = fread( szFile, 1, nRead , file );
nHadRead += nTmp;

printf( "%s", szFile );

memset( szFile, 0x0, sizeof(szFile) );
}
fclose(file);

大致过程就是这样,纯手打,没有调试过,可能有错
追问
全部文件读出来可以  我现在要读取文件中指定的一段
自我编程
2019-09-10 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

只单纯读文件某一段,首先要知道这段内容开头的位置并定位文件指针还要知道内容长度,这个除非你读取前就知道,否则不如直接读取全文或者一段一段读取,然后用遍历字符串判断的方法把你题目中说的B开头ENDB结尾的内容。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2019-09-10 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3604万
展开全部

#include<stdio.h>

#include<string.h>

#define TBEGIN "B"

#define TEND "END B"

void main() { FILE *fp; char buffer[256];

if ( fp=fopen("c:\\test.txt","r") ) {

while ( !feof(fp) ) { fgets(buffer,255,fp); if ( strcmp(buffer,TBEGIN)==0 ) break; }

while ( !feof(fp) ) { 

fgets(buffer,255,fp); if ( strcmp(buffer,TEND)==0 ) break; else printf("%s\n",buffer);

}

fclose(fp);

} else printf("无法打开文本文件.\n");

}

更多追问追答
追问
while ( !feof(pFile) )
{
fgets(buffer,255,pFile);
if ( strcmp(buffer,TBEGIN)==0 )
break;
}
老哥 你的程序一直运行到这 没东西进tbegin啊
追答
你文本文档是否有大写字母B单独一行的内容作为目标内容开始? 程序一直在找这个开始标志行未得
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vnclight
2019-09-10 · TA获得超过952个赞
知道小有建树答主
回答量:1169
采纳率:67%
帮助的人:61.2万
展开全部
#include<stdio.h>
//从文件p中接收第n行字串,保存在str中
//假设一行的文本内容不超过1000字符,如果估计超过,请自行修改函数中的1000
//如果打不开文件,返回NULL
//如果文件不足n行,返回NULL
//如果正获得正常数据,返回str的地址
char *getfileline(char *p,int n, char *str){
FILE *fp;
int i;
if ((fp=fopen(p,"r"))==NULL){
printf("打开文件错误\n");
return NULL;
}
for(i=1;i<n;i++)
if ((fgets(str,1000,fp))==NULL) {
fclose(fp);
return NULL;
}
fgets(str,1000,fp);
fclose(fp);
return str;

}

int main(){
char p[1000];
getfileline("d:\\temp.txt", 10, p);
puts(p);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hli2345678
2019-09-10 · TA获得超过1.5万个赞
知道大有可为答主
回答量:3万
采纳率:65%
帮助的人:2599万
展开全部
你可以使用条件调用指令,使用某个条件直接调用所需要的文件段就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式