C语言怎么实现从文件中读取指定行内容

「已注销」 2014-06-18 07:29:46
函数声明如下:
char* ReadSpeacialLine(char* filename, int whichLine)

函数需要返回一个字符串,就是从参数filename文件中所读取到的指定的whichLine行的内容。
...全文
8056 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
707wk 2014-06-23
  • 打赏
  • 举报
回复
直接判断'\n'的个数不就行了吗
  • 打赏
  • 举报
回复
引用 5 楼 judwenwen2009 的回复:
使用fgets函数,fgets是每次读取一行,如果你要读取第i行,可以使用while while(i--) { fgets(buf,MAX_SIZE,fd); } 丢弃了前i-1行,在读取第i行后,退出了循环,那么buf中就保存的是第i行的内容
楼上比我的写的程序要强壮的多,应该每次使用memset来清除buf,防止上一次buf中的内容未清除。 还有如果行内容太多buf会读不到行结尾的情况。 我写的这个是最简单的。。。。什么错误处理都没考虑
赵4老师 2014-06-23
  • 打赏
  • 举报
回复
仅供参考
//问题:
// 1.打开一个文本文件。
// 2.查找这个文本文件的第r行的第c1-c2列?
//
// 如:
// 文件:a
// 11111111
// 22222QQQ
// 33333333
//
// 查找第2行,第6-8列。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXC 16000
char ln[MAXC];
FILE *f;
int r,c1,c2,n,L;
void getc1c2(char *fn) {
    ln[c2]=0;
    printf("Text at row(%d),column(%d..%d) of file %s is [%s]\n",r,c1,c2,fn,ln+c1-1);
}
int main(int argc,char **argv) {
    if (argc<5) {
    HELP:
        printf("Usage:\n    %s filename.ext r c1 c2\nto get text at row(r),column(c1..c2) of filename.ext\n",argv[0]);
        return 1;
    }
    r=atoi(argv[2]);
    c1=atoi(argv[3]);
    c2=atoi(argv[4]);
    if (r<=0 || c1<=0 || c2<c1 || c2>=MAXC) goto HELP;
    f=fopen(argv[1],"r");
    if (NULL==f) {
        printf("Can not open file %s!\n",argv[1]);
        return 2;
    }
    n=0;
    while (1) {
        if (NULL==fgets(ln,MAXC,f)) break;
        L=strlen(ln);
        if ('\n'==ln[L-1]) {
            memset(ln+L-1,0,MAXC-L+1);
            n++;
            if (r==n) {getc1c2(argv[1]);break;}
        } else {
            n++;
            if (r==n) {getc1c2(argv[1]);break;}
            printf("Warning: line %d too long(>%d characters)! Ignore tails.",n,MAXC);
            while (1) {
                if (NULL==fgets(ln,MAXC,f)) goto END;
                L=strlen(ln);
                if ('\n'==ln[L-1]) break;
            }
        }
    }
    END:
    fclose(f);
    return 0;
}
//C:\test\Debug>frcc a 2 6 8
//Text at row(2),column(6..8) of file a is [QQQ]
//
  • 打赏
  • 举报
回复
使用fgets函数,fgets是每次读取一行,如果你要读取第i行,可以使用while while(i--) { fgets(buf,MAX_SIZE,fd); } 丢弃了前i-1行,在读取第i行后,退出了循环,那么buf中就保存的是第i行的内容
buyong 2014-06-23
  • 打赏
  • 举报
回复
fopen fread fclose 返回字符串如果在函数里new,要在外面delete
自信男孩 2014-06-18
  • 打赏
  • 举报
回复
使用fgets可以完成这个功能;
「已注销」 2014-06-18
  • 打赏
  • 举报
回复
楼上的,你头像好酷!
凌乱哥 2014-06-18
  • 打赏
  • 举报
回复
逐字读取,根据\n符来标记行号

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧