在C中读取文本文件

时间:2014-10-23 01:19:01

标签: c parsing text-files

我有一个名为coords.TXT的txt文件,它显示以下内容:

4900N 5350W
4830N 4900W
5000N 4900W
6000N 5830W

现在我想要一个读取此csv文件的c程序并输出输出

Longitude,Latitude: 3900N,5350W
Longitude,Latitude: 4830N,4900W
Longitude,Latitude: 5000N,4900W
Longitude,Latitude: 6000N,5830W
Longitude,Latitude: 6000N,5830W

然而,当我运行该程序时,它似乎并不想完全复制内容,我得到了输出:

Longitude,Latitude: 900N,5350W
Longitude,Latitude: 4830N,4900W
Longitude,Latitude: 5000N,4900W
Longitude,Latitude: 6000N,5830W
Longitude,Latitude: 6000N,5830W

以下是我的计划的片段:

#include <stdio.h>

int main ( int argc, char *argv[] )
{
    if ( argc != 2 ) /* argc should be 2 for correct execution */
    {
        /* We print argv[0] assuming it is the program name */
        printf( "usage: ./a.out filename\n");
    }
    else 
    {
        // We assume argv[1] is a filename to open
        FILE *file = fopen( argv[1], "r" );

        /* fopen returns 0, the NULL pointer, on failure */
        if ( file == 0 )
        {
            printf( "Could not open file\n" );
        }
        else 
        {
            char data;
            char x[5];
            char y[5];

            /* read one character at a time from file, stopping at EOF, which
               indicates the end of the file.  Note that the idiom of "assign
               to a variable, check the value" used below works because
               the assignment statement evaluates to the value assigned. */
            while  ( ( data = fgetc( file ) ) != EOF )
            {
                fscanf(file,"%s %s",&x,&y);
                printf("Longitude,Latitude: %s,%s\n",x,y);
            }
            fclose( file );
        }
    }
}

我也想要它设置所以我可以将带有N的数字分配给变量lat,带有W的数字分配给变量lon。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你打电话给fgetc读一个字符然后扔掉。

此外,您的比较已被打破。您需要将fgets的返回值与EOF进行比较,而是比较作业的返回值。

由于这不起作用的原因不起作用:

int j;
if ((j = 3.2) == 3.2)

j = 3.2的结果是一个整数,不是3.2。同样,data = fgetc( file )的结果将是一个不是EOF的字符。 EOF不是一个字符,就像3.2不是整数一样。

答案 1 :(得分:1)

问题是你的fgetc(file)每次被叫时都在吃一个角色。它吃的第一个角色是你的'4'。每隔一段时间你就会幸运,它会占用一个空间(fscanf无论如何都会抛出它。)所以不要通过fgetc测试文件是否合适,而应该尝试使用这样的东西:

while(fscanf(file,"%s %s",&x,&y) == 2){
    printf("Longitude,Latitude: %s,%s\n",x,y);
}