我正在用C编写代码以将数据写入.csv
文件。在这段代码中,我只是在第一列中写了五次A
,然后尝试从下一列的开始写出B
。这是我的代码:
#include "stdafx.h"
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
fp = fopen("Filename.csv", "w");
if(fp == NULL)
{
printf("Couldn't open file\n");
return 0;
}
for (int j = 0; j<5; j++)
{
fprintf(fp, "A\n");
}
for (int j = 0; j<5; j++)
{
fprintf(fp, ",B\n");
}
return 0;
}
我的输出期望是这样的:
A B
A B
A B
A B
A B
但是我得到这样的输出:
A
A
A
A
A
B
B
B
B
B
我的想法是学习将任何
column-row
跳转到任何column-row
是.csv
文件。因此,请帮助我学习如何在文件中的任何位置跳转。
最佳答案
您可以解析行并将已解析的部分和新部分连接起来,然后再次写入文件。我认为这不是最好的方法,但是可以。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp, *fp2;
size_t len = 0;
ssize_t read;
char * line = NULL;
/* Write first part "A" */
fp = fopen("Filename.csv", "w");
if(fp == NULL)
{
printf("Couldn't open file\n");
return 0;
}
/* Write and done */
for (int j = 0; j<5; j++) fprintf(fp, "A\n");
fclose(fp);
/* Open templorary file */
fp = fopen("file.tmp", "a");
if (fp != NULL)
{
/* Open exiting file */
fp2 = fopen("Filename.csv", "r");
if(fp2 != NULL)
{
/* Read from exing file */
while ((read = getline(&line, &len, fp2)) != -1)
{
/* Remove new line character */
sscanf(line, "%512[^\n]\n", line);
/* Join and write to file */
sprintf(line, "%s B", line);
fprintf(fp, "%s\n", line);
}
/* Clean up memory */
fclose(fp2);
if (line) free(line);
}
/* End up */
fclose(fp);
remove("Filename.csv");
rename("file.tmp", "Filename.csv");
}
return 0;
}
关于c - 无法使用C在excel文件中从一个地方正确跳到另一个地方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31560501/