使用另一个文本文件中的值填充一个文本文件

时间:2017-05-10 22:27:47

标签: c arrays loops readfile

我有以下文本文件results.txt:

x y  u  v
3 2 10 12
3 3 10 15
3 4 11 15
5 1 10 12
5 2 12 13
5 3 9 9

现在我想从上面的文件中取出值u和v并将它们放到另一个文件中,其中x从2到5,y从1到5,所以我可以得到所需的输出:

2 1 
2 2
2 3
2 4
2 5
3 1
3 2 10 12
3 3 10 15
3 4 11 15
3 5
4 1
4 2
4 3
4 4
4 5
5 1 10 12
5 2 12 13
5 3
5 4
5 5

为了在上面的输出中生成x和y值,我只使用一个循环,如下所示:

#include <stdlib.h>
#include <stdio.h>

int main() {

    float lat,lon;
    int count;

    count=1;

    for ( lat = -70; lat <= 80; lat = lat + .125){
        for ( lon = -179.875; lon <= 180; lon = lon + 0.125){
            printf("%d) Value of lat/lon: %0.2f/%0.2f\n", count,lat,lon);
            count=count+1;
            if (xx= x && yy = y){
                 printf("%d %d %f %f\n",xx,yy,u,v)
            }
            else
            {
                 printf("%d %d\n",x,y)

            }       
        }
    }

}

在上面的c程序片段的上下文中,我该如何读取文件results.txt以及上面的循环,以便当上面循环中的x和y值组合与结果中的x和y组合匹配时.txt(xx和yy)插入它会从results.txt文件中打印相应的行吗?如何使用适当的读取语句调整上述程序以获得所需的输出结果?

1 个答案:

答案 0 :(得分:0)

好的,让我告诉你我不明白你想用你的示例代码做什么。它似乎与您的问题无关:

  

使用其他文本文件中的值填写一个文本文件

如果您已经填充了results.txt,并且希望按照您的定义填写第二个文件(我们称之为second.txt),那么您可以按照以下步骤操作:

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE* fp;
    int x, y, i;
    char found = 0;

    int results[1024][4] = {};
    int rows = 0;

    /* Open the results.txt for read. */
    fp = fopen("results.txt", "r");
    if(fp == NULL)
        exit(EXIT_FAILURE);

    /* Parse results.txt line-by-line and store the values to results array. */
    while(fscanf(fp, "%d %d %d %d\n",
            &results[rows][0], &results[rows][1],
            &results[rows][2], &results[rows][3]) == 4 && rows < 1024) {
        printf("x: %d, y: %d, u: %d, v: %d\n", results[rows][0],
                results[rows][1], results[rows][2], results[rows][3]);
        rows++;
    }

    fclose(fp);

    /* Open the second.txt for write. */
    fp = fopen("second.txt", "w");
    if(fp == NULL)
        exit(EXIT_FAILURE);

    for(x = 2; x <= 5; ++x) {
        for(y = 1; y <= 5; ++y) {
            found = 0;

            /* Search for matching entry in results array. */
            for(i = 0; i < rows; ++i) {
                if(results[i][0] == x && results[i][1] == y) {
                    found = 1;
                    break;
                }
            }

            if(found)
                fprintf(fp, "%d %d %d %d\n", x, y, results[i][2], results[i][3]);
            else
                fprintf(fp, "%d %d\n", x, y);
        }
    }

    fclose(fp);
    exit(EXIT_SUCCESS);
}

上面的示例未经过优化,但经过测试和运行。它仅限于results.txt中最多1024行。