文件解析出数据帧

项目场景:

查找文件中 <数据头>+<数据>+<数据尾>,输出<数据>+<自定义数据尾>

问题描述:

读取一个文件,从文件中查找想要的数据,根据数据头如"Cost:"和数据尾","找到中间的数据,输出到另一个文件中. ```

解决方案:

#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
#define STR_MAX   10
#define FILE_READ_MAX 65535
#define FILE_NAME_MAX 100
char namefile[] = { "C:\\Users\\User\\Desktop\\AlexNet.txt" };
char outnamefile[] = { "C:\\Users\\User\\Desktop\\out.csv" };
void main()
{
	FILE* fp_in, *fp_out;
	char namebuffer[FILE_NAME_MAX],outnamebuffer[FILE_NAME_MAX];
	char filebuffer[FILE_READ_MAX],outbuffer[FILE_READ_MAX];
	char *pc_in = filebuffer, *pc_out = outbuffer;
	char str_head[STR_MAX], str_end[STR_MAX],str_between[STR_MAX];
	char *p_in = namebuffer;
	char *p_out = outnamebuffer;
	char *ps_head = str_head;
	char *ps_end = str_end;

	memset(outbuffer, 0, strlen(outbuffer));
	memset(filebuffer, 0, strlen(filebuffer));
	printf("in file name and dir:");
	scanf("%s", p_in);
	printf("out file name and dir:");
	scanf("%s", p_out);
	printf("head file name and dir:");
	scanf("%s",ps_head);
	//printf("end file name and dir:");
	//scanf("%s",ps_end);
	//scanf("between:%s",p_between);
	//strcpy(p_in, namefile);
	//strcpy(p_out, outnamefile);
	//strcpy(ps_head, "Cost:");
	//strcpy(ps_end, ",");
	fp_in = fopen(p_in, "r");

	if (fp_in == NULL)
	{
		printf("file open error\n");
		exit(0);
	}
	fp_out = fopen(p_out, "w+");
	if (fp_out == NULL)
	{
		printf("file open error\n");
		exit(0);
	}
	fread(filebuffer, FILE_READ_MAX,1,fp_in);
	//fwrite(filebuffer, FILE_READ_MAX, 1, fp_out);
	while (*pc_in)
	{
		if (strncmp(pc_in, ps_head, strlen(ps_head)) == 0)	//数据帧头部相等
		{
			pc_in = pc_in + strlen(ps_head);	//指针指向 有效数据
			while (*pc_in)
			{
				//if (strncmp(pc_in, ps_end, strlen(ps_end) == 0))	//数据帧尾部相等
				if(*pc_in == ',')
				{
					pc_in = pc_in + strlen(ps_end);	//指针指向 下一条数据
					*(pc_out++) = '\n';
					break;
				}
				*(pc_out++) = *(pc_in++);
			}
		}
		pc_in++;
	}
	printf("%s", outbuffer);
	fseek(fp_out, 0, SEEK_SET);
	fwrite(outbuffer, strlen(outbuffer), 1, fp_out);
	fclose(fp_in);
	fclose(fp_out);
	while (1);
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值