C-在特定点上从文件中读取一行



所以我写一个代码以获取scanf文本文件并返回格式文本消息日志。我很想知道如何在某个点扫描文件并在文件扫描行时打印出E.x以外的每个字符串" 332982000 205552002 2055551001 7韦伯先生,我可以问你一个问题吗?"我在整数时扫描前4个数字,并将其余的书面文本扫描为" Webb先生"的字符阵列。

我尝试使用fscanf使用for循环以扫描到一个数组中,但它不起作用。我还认为我可以使用malloc来节省空间,但我不知道该尺寸的论点要做什么。任何帮助将不胜感激!

int posix;
int phone1;
int phone2;
int textsize;
int val, val2;
char line[256];
char text[3000];
int len=strlen(line);
int i=0;
printf("nnTime                           %s                           %s", argv[2], argv[3]);
printf("n======================================================================================nnn");
FILE* textfile= fopen(argv[1],"r");
fscanf(textfile, "%d %d %d %d %s", &posix, &phone1, &phone2, &textsize, text);
while( fgets(line, sizeof(line), textfile) ) { 
    val= atoi(argv[2]);
    val2=atoi(argv[3]);
    if ( (val==phone1) && (val2==phone2) ) {
        printf(" %s ", text); //only prints Mr
        text=(char*)malloc(sizeof())//tried malloc but not too sure how to use it correctly
        for (i=0; i<len; i++) { //tried using for loop here didnt work. 
          fscanf("%s", text);
          }
        sortText(phone1, phone2, textsize, text);
        //readableTime(posix);
         }

else if(((val2 == phOte1) printf("%s",text);

        sortText(phone1, phone2, textsize, text);
        //readableTime(posix);
         }

fscanf(textfile, "%d %d %d %d %s", &posix, &phone1, &phone2, &textsize, text);             

}

fclose(textfile);
return 0;

}

首先,将整个文件读取到malloc'd char数组中。FSEEK和FTELL为您提供文件大小:

// C99
FILE *fp = fopen("file", "r");
size_t filesize;
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
char *filetext = malloc(filesize + 1);
fread(filetext, 1, filesize, fp);
filetext[filesize] = 0;

然后,将缓冲区用于一条线条,其大小与整个文件的大小相同,因此您肯定具有足够的尺寸。sscanf()可用于从字符串中读取内容。

int readbytes;
for(int i=0; i < filesize; i+=readbytes) {
    char line[filesize];
    int posix, phone1, phone2, textsize;
    if(EOF == sscanf(
        &filetext[i], "%d%d%d%d%[^n]%n", &posix, &phone1,
        &phone2, &textsize, line, &readbytes))
    {
        break;
    }
    printf("%d %d %d %d '%s' %dn", posix, phone1, phone2, textsize, line, readbytes);
}

格式指定'%[^ n]'的意思是:每个字符,直到下一个newline字符。格式指定'%n'为您的字节数量为您的字节数量到目前为止,从而有效地使用了该sscanf调用的字节,您可以使用该字节来推进迭代器。

相关内容

  • 没有找到相关文章

最新更新