我正在用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/

10-10 18:53
查看更多