Code Bye

c如何读取指定行字符串

 

比如 char *str变量 内容是
abc=123
def=456
aaa=444
….

这样很多数据,能不能不使用循环而指定读取哞一行呢?
比如这次我读取了前100行的数据,下次我想从101行开始读取怎么做呢,不想使用循环一行行的读取判断当前是不是101行 ,这样效率太低了。
请教大婶解答

10分

没理解啥意思,如果是二维数组变量的话,不是直接写行数就可以跳转吗?

20分

除非每行的长度一样长
 
引用 3 楼 dabanzhu111 的回复:

这功能我以前做过好像

326技术交流综合平台
http://www.sanerliu.com

能说一下当时你怎么做的吗

 
引用 1 楼 pyromaniac 的回复:

没理解啥意思,如果是二维数组变量的话,不是直接写行数就可以跳转吗?

不是二维数组是char *str

 
引用 2 楼 mewiteor 的回复:

除非每行的长度一样长

如果一样长怎么读取呢,另外在请教一下 一个字符串能不能从指定字节开始读取呢,比如先读取前面1000字节,然后下次再从1001字节开始读取。

20分

引用 6 楼 iam007008 的回复:
Quote: 引用 2 楼 mewiteor 的回复:

除非每行的长度一样长

如果一样长怎么读取呢,另外在请教一下 一个字符串能不能从指定字节开始读取呢,比如先读取前面1000字节,然后下次再从1001字节开始读取。

那就从str[1001]开始

30分

仅供参考:
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *f,*fl;
long lastoffset=0,linenum=0;
char ln[256];
int n,k;
int main() {
    fl=fopen("lastoffset","r");
    if (fl) {
        fscanf(fl,"%d %d",&lastoffset,&linenum);
        fclose(fl);
    }
    f=fopen("data.txt","rb");
    fseek(f,lastoffset,SEEK_SET);
    while (1) {
        if (NULL==fgets(ln,255,f)) {
            lastoffset=0;
            linenum=0;
            break;
        }
        if (""\n""==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;
        if (""\r""==ln[strlen(ln)-1]) ln[strlen(ln)-1]=0;
        lastoffset=ftell(f);
        linenum++;
        printf("%8d: %s\n",linenum,ln);
        k=getch();
        if (k==27) break;//按Esc键提前退出
    }
    fclose(f);
    fl=fopen("lastoffset","w");
    fprintf(fl,"%d %d",lastoffset,linenum);
    fclose(fl);
    return 0;
}

20分

重新声明一个char*的数组,先写个循环,把每行分开放到里面,之后要第几行都只接调用

比如你声明的数组名叫s, 需要第一行,就s[0],第二行s[1]….


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c如何读取指定行字符串