gpt4 book ai didi

将文件的特定列复制到 C 中的另一个文件

转载 作者:太空狗 更新时间:2023-10-29 15:00:49 26 4
gpt4 key购买 nike

我有两个文件,第一个是这样的

125 6.678
435 9.084
234 8.874

等等,大约有 2,048,000 个条目,由我的程序生成。第二个文件是由 gnuplot 生成的文件,看起来有点像:

65 321456 985
78 98374 834
54 8493 848

依此类推也有大约 2,048,000 个条目。

现在我需要做的是在 3D 中使用 gnuplot 绘制第一个文件的第二列和第二个文件的两列。我认为首要任务是将它们全部放入同一个文件中,我只想编写一个简单的 c 程序来快速读取两个文件并将相关列放入一个文件中,但我不确定该怎么做。我知道如何复制一个文件的全部内容并使用 c 程序将它们写入另一个文件 - 例如要执行此操作,我有以下代码:

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

int main (int argc, const char * argv[])
{
FILE *avalanche_size_BM;
FILE *avalanche_size_BM_2000;
char ch;


avalanche_size_BM = fopen("/Users/maheensiddiqui/Documents/MSc_Proj/avalanche_size_BM.dat","r");

if (avalanche_size_BM == NULL)
{
printf("I couldn't open.\n");
exit(0);
}
avalanche_size_BM_2000 = fopen("/Users/maheensiddiqui/Desktop/avalanche_size_BM_2000.dat", "w");
if (avalanche_size_BM_2000 == NULL)
{
printf("I couldn't open.\n");
exit(0);
}

printf("\n success!!");

while((ch=getc(avalanche_size_BM))!=EOF)
putc(ch,avalanche_size_BM_2000);

fclose(avalanche_size_BM);
fclose(avalanche_size_BM_2000);



return(0);
}

但是我该如何告诉它只读取第一个文件中的第二列和第二个文件中的前两列并将它们(而不是所有列)复制到第三个文件,我可以用它来绘制我的 3 -D 图。

任何帮助将不胜感激!

谢谢

最佳答案

非 C 答案

这假设您只想要结果,并不真正担心如何在 C 中实现。

要使用简单的命令行工具生成文件,您可以使用pasteawk 来获取结果:

paste 读取多个文件并将所有行组合在一起,以制表符分隔

因此,如果您有两个文件,如 foo.txt 和 bar.txt,它们具有以下内容:

foo.txt:

a1 b1 c1 
a2 b2 c2

栏.txt:

d1 e1 f1
d2 e2 f2

粘贴 foo.txt bar.txt 输出:

a1 b1 c1    d1 e1 f1
a2 b2 c2 d2 e2 f2

然后您可以使用 awk 过滤出您想要的列。

例如,如果您想要第 2、4 和 5 列(b1、d1、e1),您可以使用以下内容:

粘贴 foo.txt bar.txt | awk '{ print $2 ""$4 ""$5 }'

我假设这两个文件都有相同数量的条目在 OSX 中从 Finder -> Utilities 启动命令 shell

在 shell 提示符下你可以这样做:

$ cd Desktop
$ paste avalanche_size_BM.dat avalanche_size_BM_2000.dat | \
awk '{ print $2 " " $4 " " $5 }' > avalanche_size_3d.dat

这将在 Desktop 子目录中创建一个名为 avalanche_size_3d.dat 的文件,该文件来自第一个文件的第 2 列和第二个文件的前两列(因为它们在粘贴在一起时最终位于位置 4 和 5)。

C-答案

这本质上就像编写一个小型粘贴实用程序

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

int main()
{
FILE *fp1 = fopen ("file1", "r");
FILE *fp2 = fopen("file2", "r");
FILE *out = fopen("fileout", "w");

while (!feof(fp1) && !feof(fp2)) {
char buf[256], col1[256], col2[256], col3[256];
if ( fgets(buf, sizeof(buf), fp1) == 0 )
break;
sscanf(buf, "%s %s", col2, col1); /* we only need col1, col2 is reused later */
if ( fgets(buf, sizeof(buf), fp2) == 0 )
break;
sscanf(buf, "%s %s", col2, col3);
fprintf(out, "%s %s %s\n", col1, col2, col3);
}
fclose(fp1);
fclose(fp2);
fclose(out);
}

关于将文件的特定列复制到 C 中的另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com