标题:求助,怎么把数字以数值形式写入文件,而不是以文本形式写入文件
只看楼主
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
结帖率:83.33%
已结贴  问题点数:20 回复次数:5 
求助,怎么把数字以数值形式写入文件,而不是以文本形式写入文件

如上图的文本文件, 我想把""的字符串部分以文本形式写入文件,后面的数字以数值形式写入文件。但是程序运行完后发现数字部分也是文本的形式了,求助该怎么把数字以数值的形式写入文件
下面是源代码
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char inputname[256], *outputname, tempstring[256];
    char number[11] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
    int i;
    int j = 0;
    int m = 0;
    int flag = 0;
    int n;
    char cachestring[256][256];
    char line[256];
    int strcount = 0;
    FILE *fpinput, *fpoutput;
   
    puts("请输入要转换的json文件");
    gets(inputname);
    if((fpinput = fopen(inputname, "r+")) == NULL)
    {
        printf("无法打开%s,请检查文件名是否正确,以及文件是否在目录", inputname);
        exit(EXIT_FAILURE);
    }
    outputname = strcat(inputname, ".rton");
    if((fpoutput = fopen(outputname, "w+")) == NULL)
    {
        printf("无法创建%s", outputname);
        exit(EXIT_FAILURE);
    }
   
    fputs("RTON", fpoutput);
    putc(0x01, fpoutput);
    putc(0x00, fpoutput);
    putc(0x00, fpoutput);
    putc(0x00, fpoutput);
    while(fgets(line, 256, fpinput) != NULL)
    {
        for(i = 0; i < strlen(line); i++)
        {
            if(line[i] == '\"')
            {
                i++;
                for(j = 0, strcount = 0;line[i] != '\"'; j++, i++, strcount++)
                {
                    cachestring[m][j] = line[i];
                }
                putc(0x90, fpoutput);
                putc(strcount, fpoutput);
                fputs(cachestring[m], fpoutput);
                m++;
            }
            for(n = 0; n < 11; n++)
            {
               
                if(line[i] == number[n])
                {
                    for(j = 0, strcount = 0; line[i] != ','; j++, i++, strcount++)
                    {
                        tempstring[j] = line[i];
                    }
                    flag = atoi(tempstring);
                    fprintf(fpoutput, "%x", flag);
                    break;
                }
            }
        }
    }  
    fclose(fpinput);
    fclose(fpoutput);
   
    return 0;
}




[此贴子已经被作者于2018-9-22 17:57编辑过]

搜索更多相关主题的帖子: 形式 写入 文件 int line 
2018-09-22 17:45
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 
这是程序运行的结果

可以看到数字部分也以数字字符的ASCII码输入了
但是我想要的结果是这样的
2018-09-22 17:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
用二进制文件读写
例如:
#include <stdio.h>
int main(void)
{
    char number[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    char buf[10];
    int i;
    FILE *fp = fopen("test.txt", "ab+");
    fwrite(number, 10, 1, fp);
    fseek(fp, 0, SEEK_SET);
    fread(buf, 10, 1, fp);
    for (i=0; i<10; ++i)
        printf("%d\n", buf[i]);
    fclose(fp);
    return 0;
}
2018-09-23 08:28
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 
回复 3楼 吹水佬
谢谢大佬,还想问一个问题是如何清空一个字符串中的内容,我想用一个tempstring来储存遇到的字符串,但是如果下个字符串比前面的字符串短的话就还会残留上个字符串的内容,因此我想在每次读取一个字符串后都把内容清空。试过strcpy(tempstring, " ")的方法,但是还是不能清空,所以想请教一下大佬
2018-09-24 10:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用心空之上在2018-9-24 10:00:50的发言:

谢谢大佬,还想问一个问题是如何清空一个字符串中的内容,我想用一个tempstring来储存遇到的字符串,但是如果下个字符串比前面的字符串短的话就还会残留上个字符串的内容,因此我想在每次读取一个字符串后都把内容清空。试过strcpy(tempstring, " ")的方法,但是还是不能清空,所以想请教一下大佬

可以不用担心残留的内容,字符串是以'\0'作为结束。
只要明确在存放字符串的有效空间中,字符串的定义是从哪开始(首址)和在哪结束('\0')。
确要重新初始化存放字符串的空间,也可以用memset()函数。

[此贴子已经被作者于2018-9-24 10:25编辑过]

2018-09-24 10:24
心空之上
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2018-5-29
得分:0 
回复 5楼 吹水佬
谢谢大佬。以后有问题还希望大佬不吝赐教。
2018-09-25 14:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489944-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.122408 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved