写文件时字段对齐和填充的C代码实现
来源:互联网 发布:微博的营销模式知乎 编辑:程序博客网 时间:2024/05/02 02:07
一、概述
在实际的软件开发项目中,经常会遇到需要转换某些文件中的字段格式的问题。例如,在生成的话单文件中,要求某些字段的长度固定,如果目前该字段的长度不足,则不足的位数用某些特殊的字符来填充(并可能会对填充的位置有要求)。之所以要求字段格式固定,是为了方便对文件的自动处理,因为很多软件是按照一定的规则对文件进行处理的。本文示例了对字段进行填充的方法。
本文要求生成文件中的字段长度固定为10,如果写入的内容长度小于10,不足部分可以用空格或0来填充。此外,要求程序可以控制在写入内容的左边或右边填充及填充的是0还是空格。
二、C代码实现
/*********************************************************************** 版权所有 (C)2015, Zhou Zhaoxiong。** 文件名称:TestAlign.c* 文件标识:无* 内容摘要:示例对文件内容对齐和填充的处理* 其它说明:无* 当前版本:V1.0* 作 者:Zhou Zhaoxiong* 完成日期:20150901***********************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>// 重定义数据类型typedef signed int INT32;typedef signed char INT8;// 函数声明void WriteFile(INT32 iAlignFlag, INT8 *pszTestStr);INT32 main();/*********************************************************************** 功能描述:主函数* 输入参数:无* 输出参数:无* 返 回 值:无* 其它说明:无* 修改日期 版本号 修改人 修改内容* -------------------------------------------------------------------* 20150901 V1.0 Zhou Zhaoxiong 创建***********************************************************************/INT32 main(){ INT32 iAlignFlag = 0; INT8 szTestStr[50] = {0}; printf("请输入对齐方式(1, 2, 3, 4)和测试字符串\n"); scanf("AlignFlag=%d, TestStr=%s", &iAlignFlag, szTestStr); printf("输入信息: 对齐方式%d, 测试字符串%s\n", iAlignFlag, szTestStr); WriteFile(iAlignFlag, szTestStr); // 调用写文件函数 return 0; // main函数执行成功返回0}/*********************************************************************** 功能描述:根据对齐方式写文件* 输入参数:iAlignFlag-对齐方式 pszTestStr-测试字符串* 输出参数:无* 返 回 值:无* 其它说明:设基准长度为10个字节, 未达到则补空格或0* 修改日期 版本号 修改人 修改内容* -------------------------------------------------------------------* 20150901 V1.0 Zhou Zhaoxiong 创建***********************************************************************/void WriteFile(INT32 iAlignFlag, INT8 *pszTestStr){ FILE *fp = NULL; INT8 szContent[50] = {0}; INT8 szFileName[50] = {0}; if (pszTestStr == NULL) // 判断输入参数是否为空 { printf("WriteFile: input parameter(s) is NULL!"); return; } if (iAlignFlag == 1) // 左对齐, 不足的位补空格 { _snprintf(szContent, sizeof(szContent)-1, "%10s", pszTestStr); } if (iAlignFlag == 2) // 右对齐, 不足的位补空格 { _snprintf(szContent, sizeof(szContent)-1, "%-10s", pszTestStr); } if (iAlignFlag == 3) // 左对齐, 不足的位补0 { _snprintf(szContent, sizeof(szContent)-1, "%-s%0*d", pszTestStr, 10-strlen(pszTestStr), 0); } if (iAlignFlag == 4) // 右对齐, 不足的位补0 { _snprintf(szContent, sizeof(szContent)-1, "%0*d%s", 10-strlen(pszTestStr), 0, pszTestStr); } // 将文件内容写入 strcpy(szFileName, "D:\\Test\\TestFile.txt"); // 注意: 文件目录是双\, 不要写成"D:\Test\TestFile.txt" fp = fopen(szFileName, "w"); if (fp != NULL) { fputs(szContent, fp); fclose(fp); fp = NULL; printf("WriteFile: Write %s into file successfully!\n", szContent); } else { printf("WriteFile: Write %s into file failed!\n", szContent); }}
三、程序说明
1.本程序用iAlignFlag来表示填充方式,具体如下:
(1) 如果iAlignFlag为1,则表示在写入内容的右边填充空格(即内容左对齐, 不足的位补空格)。
(2) 如果iAlignFlag为2,则表示在写入内容的左边填充空格(即内容右对齐, 不足的位补空格)。
(3) 如果iAlignFlag为3,则表示在写入内容的右边填充0(即内容左对齐, 不足的位补0)。
(4) 如果iAlignFlag为4,则表示在写入内容的左边填充0(即内容右对齐, 不足的位补0)。
2.大家要特别注意本程序中在左边或右边填充0或空格的方法,具体如下:
(1) 左对齐,右补空格:
_snprintf(szContent, sizeof(szContent)-1, “%10s“, pszTestStr);
(2) 右对齐,左补空格:
_snprintf(szContent, sizeof(szContent)-1, “%-10s“, pszTestStr);
(3) 左对齐,右补0:
_snprintf(szContent, sizeof(szContent)-1, “%-s%0*d“, pszTestStr, 10-strlen(pszTestStr), 0);
(4) 右对齐,左补0:
_snprintf(szContent, sizeof(szContent)-1, “%0*d%s“, 10-strlen(pszTestStr), 0, pszTestStr);
四、程序输出
程序输出的截图如下:
同时,查看“D:\Test”下的“TestFile.txt”文件内容,可以看到写入内容是正确的。
五、总结
本程序代码虽然不多,也不复杂,但大家要特别注意对于对齐和字符填充的处理方法。如果让大家从头开始编写程序,也不是那么容易找到正确的处理方法的。这也说明了很多问题看似简单,但要完美地解决它,还需要我们具备扎实的功底,也还需要我们多多实践。
欢迎大家关注并支持本人新书《C程序员从校园到职场》。
- 写文件时字段对齐和填充的C代码实现
- 写文件头的算法流程及C代码实现
- 填充和截取某一字段的值
- 按某类型对齐的C代码实现
- 【学习C++】C++项目的头文件和实现文件分别写什么
- C代码写文件demo
- mysql 整型 数据宽度, 字段的零填充和符号
- jquery编写的,数据自动填充插件,实现页面和服务器端代码分离
- 怎样用下面C语言代码实现直接对数据加密,不用写文件的方式。求助大神帮忙改改!
- 写ini文件的重复字段问题
- tensorflow实现图像的裁剪和填充
- struts2的字段校验类型和struts2实现文件上传
- 关于内存对齐,写代码中需要注意的事项
- 输出的对齐与填充字符
- C++中如何用cout实现输出的填充,宽度,对齐及其精度控制
- c语言实现最简单的写文件操作
- C++的头文件和实现文件分别写什么
- C++的头文件和实现文件分别写什么
- hdu 5226 Tom and matrix,lucas定理
- 简易HTTP协议解析
- (图文)在MyEclipse(2015)中上传项目到github的步骤(很详细)
- Mock学习
- 2015多校联合第二场5308I Wanna Become A 24-Point Master
- 写文件时字段对齐和填充的C代码实现
- json to object
- 简单PHP性能记录工具
- Aircrack-ng之Airolib-ng命令
- C语言基础知识之(十八):堆内存的分配函数及运用
- 数据结构常用排序算法总结
- 自定义的连接MongoDB的工具类(DBHelper)
- 测试基础 软件质量
- 共享内存