请问怎样用C写代码把文本中由空格隔开的数据换成逗号隔开,并在每个数据上加双引号。跪求解答!!

比如我有两行数据
10 20 30 40 50
60 70 80 90 100
希望转换成
“10”,“20”,“30”,“40”,"50"
“60”,“70”,“80”,“90”,"100"
跪谢!!

#include <stdio.h>

#include <stdlib.h>

int main() 

{

    FILE *fp_test,*fp_test_new;

    int data,i=0;

    

    //以只读方式 打开要读取的文件           

    if((fp_test=fopen("test.txt","r"))==NULL)    

    {   //若打开文件出错,则输出提示信息,并退出

        printf("\n open test.txt error! \n"); 

         exit(1); 

    }

    

    //以只写方式 打开存储转换数据文件;若不存在,则创建

    if((fp_test_new=fopen("fp_test_new.txt","w+"))==NULL)

    {   //若打开文件出错,则输出提示信息,并退出

         printf("\n open fp_test_new.txt error"); 

        exit(1); 

    }


    //读取数据、转换数据、存储数据

    while(!feof(fp_test))                             //此处控制是否到文件结尾

    {

        if(0!=i)

        fprintf(fp_test_new, ",");                //加逗号


        fscanf(fp_test,"%d",&data);                   //逐个读取数据,可以更灵活的处理文件里的数据


        fprintf(fp_test_new,"\"%d\"",data);           //加双引号

   

        if(4==i)

            fprintf(fp_test_new,"\n");                //加换行符 

            //fputs("\n",fp_test_new);                //另一种加字符方式 

        i=(i+1)%5;                                    //改变 I 的值 

    }


    //关闭文件

    fclose(fp_test);

    fclose(fp_test_new);


    return 0;

}


已测试,保证可用,给个赞吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-06
#include <stdio.h>
int main() 
{
    FILE *fp,*fp1;
    int n;
    char c;
    fp=fopen("test.txt","r");
    if(fp==NULL)return 1;
    fp1=fopen("new.txt","w");
    while(1)
    {
        fscanf(fp,"%d",&n); //逐个读取整形,好处是每行数据个数可以不同
        fprintf(fp1,"\"%d\"",n); //加双引号
        c=fgetc(fp);
        if(c==EOF)break;
        else if(c!='\n')fputc(',',fp1);
        else fputc('\n',fp1);     
    }
    fcloseall();
    return 0;
}

追问

你好,贵程序输出结果和原程序输出格式不同,没有换行,而是一股脑地整行输出。请问还有改进方法吗?

追答

有换行呀,你再测试一遍



第2个回答  2014-03-06
#include<stdio.h>
void main()
{ FILE *fp,*tp;
char buffer[256];
int a[5]; //每行5个数据
if ( fp=fopen("data.txt","r") )
{ if ( tp=fopen("newdata.txt","r") )
{ while ( !feof(fp) )
{ fgets(buffer,256,fp);
sscanf(buffer,"%d %d %d %d %d",a,a+1,a+2,a+3,a+4); //这两句也可以搞个循环
sprintf(buffer,"%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4]); //找空格替换成逗号
fputs(buffer,tp);
}
fclose(tp);
}
fclose(fp);
}
}追问

你好,因为数据文件是其它程序自动生成,行数末知,循环不太可行。不过我事先没有讲清楚,不好意思,另外好像输出结果没有加引号。有改进方法吗?

追答

引号忘加了,输出那句改成下面即可:

sprintf(buffer,"\"%d\",\"%d\",\"%d\",\"%d\",\"%d\"\n",a[0],a[1],a[2],a[3],a[4]);
这个程序会读取输入文件的每一行进行处理,直到文件结束,只是需要知道每行有几个数据,没有缓存所有数据。

相似回答