繁体   English   中英

用C读取文件。具有fread功能的并发症

[英]File reading in C. Complications with fread function

我正在读取输入文件,并且在读取其中的每一行时遇到了麻烦。 我的输入文件有两种类型的记录。 一个有52个字符,另一个有926个字符。我不知道如何处理我的fread函数,以便它可以处理两条记录。 谁能帮我吗? 谢谢

#define LINESZ 927     /* one extra byte for new line */
int num;               /* integer for line number */
char buffer[LINESZ];   /* buffer for file read line */

int main()
{
    FILE *ifp, *ofp;

    ifp = fopen("dd:INPUTF", "r");
    ofp = fopen("dd:OUTPUTF", "w");

    while (!feof(ifp)) {
        if (num = (fread(buffer, sizeof(char), LINESZ, ifp))) {
            if (buffer[22] == 'O') {
                printf("ravroot, %c\n", buffer[22]);
                printf("%s*\n", buffer);
            }
            else if (buffer[22] == 'A') {
                printf("ravrate, %c\n", buffer[22]);
                printf("%s*\n", buffer);
            }
        }
    }

    fclose(ifp);
    fclose(ofp);
    return(0);
}

从文件读取fgets ,应使用fgets函数。 但是请注意, fgets会将换行符写入缓冲区,因此您需要删除换行符。 结果代码如下所示

#define LINESZ 1024    /* lots of extra bytes, memory is cheap */
char buffer[LINESZ];   /* buffer for file read line */

int main( void )
{
    int length;
    FILE *ifp, *ofp;

    ifp = fopen("dd:INPUTF", "r");
    ofp = fopen("dd:OUTPUTF","w");

    while( fgets( buffer, LINESZ, ifp ) != NULL )
    {
        // remove the newline character, if any
        length = strlen( buffer );
        if ( length > 0 && buffer[length-1] == '\n' )
            buffer[--length] = '\0';                    

        if ( length > 22 )
        {
            if(buffer[22] == 'O')
            {
                printf("ravroot, %c\n", buffer[22]);
                printf("%s*\n", buffer);
            }
            else if(buffer[22] == 'A')
            {
                printf("ravrate, %c\n", buffer[22]);
                printf("%s*\n", buffer);
            }
        }
    }
    fclose(ifp);
    fclose(ofp);
    return(0);    
}

如果每个记录都在单独的行中,则使用fgets函数,该函数将在遇到换行符时停止,例如:

 while(fgets(buf,LINESZ,ifp) != NULL)
 {
     //you can put your code here
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM