从特定点的文件中读取一行

时间:2017-02-28 21:36:24

标签: c printf malloc scanf

所以我正在编写代码来获取scanf文本文件并返回格式文本消息日志。我不知道如何在某个点扫描文件中的字符串并打印超出该点的每个字符串E.X当文件扫描该行时 “332982000 2055552002 2055551001 7韦伯先生,我可以问你一个问题吗?”我将前4个数字扫描为整数,并将其余的书面文本扫描成一个从“Mr. Webb”开始的字符数组。

我尝试使用带有fscanf的for循环扫描到一个数组但它没有用。我还以为我可以使用malloc来节省空间,但我不知道在sizeof参数中放什么。任何帮助将不胜感激!

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("\n\nTime                           %s                           %s", argv[2], argv[3]);
printf("\n======================================================================================\n\n\n");

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);
         }

否则if((val2 == phone1)&amp;&amp;(val == phone2)){             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;

}

1 个答案:

答案 0 :(得分:1)

首先,将整个文件读入malloc&#39; d char数组。 fseek和ftell为您提供文件大小:

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' %d\n", posix, phone1, phone2, textsize, line, readbytes);
}

然后使用缓冲区作为整行文件大小的单行,这样你肯定有足够的大小。 sscanf()可用于从字符串中读取内容。

{{1}}

格式说明符&#39;%[^ \ n]&#39;表示:每个字符直到下一个换行符。格式说明符&#39;%n&#39;给出了到目前为止使用此sscanf调用读取的字节数,实际上是您的行大小,可用于推进迭代器。