【原创】C语言处理文件数据(4) 分类: Linux --- C ...

 

【原创】C语言处理文件数据(4)

 

testtrain.txt数据文件总共1600行,取两行进行数据展示,原数据格式:

176 0:3 1:3 2:5 3:1 5:1 7:1 10:1 11:1 12:24 13:13 14:8 15:9 17:4 19:27 21:1 28:12 32:1 36:14 44:14 48:15 49:95 50:1 51:24 52:19 53:5 54:7 55:5 57:49 58:24 59:11 61:12 62:2 64:5 65:2 66:11 67:6 71:1 72:9 73:23 74:10 75:25 76:22 77:25 78:23 79:8 80:3 81:7 82:7 83:2 84:23 85:28 86:65 87:10 88:3 89:7 90:6 91:7 92:5 93:9 94:13 95:29 96:1 97:3 98:15 99:4 100:5 101:9 102:6 104:24 105:3 106:13 107:7 108:2 109:9 110:21 111:1 114:6 115:4 116:1 121:13 123:11 124:16 125:15 126:3 129:7 130:3 131:5 132:31 133:9 134:5 135:5 136:13 139:1 140:4 141:7 142:7 143:4 144:8 145:64 146:12 147:6 148:3 149:38 150:35 151:2 152:3 153:6 154:11 155:1 156:26 157:16 158:12 159:9 163:5 164:10 169:1 170:1 171:12 172:16 173:24 174:10 175:7 176:14 177:8 178:1 179:2 180:15 181:33 182:29 183:15 185:21 186:1 187:55 188:11 189:9 190:64 191:3 194:4 195:42 196:3 197:16 198:16 201:2 202:9 203:28 204:56 206:12 207:28 208:12 209:14 210:7 211:11 212:16 216:6 217:13 218:3 219:10 220:20 221:2 222:15 223:19 224:22 225:12 226:3 227:4 228:12 229:33 230:9 232:5 233:16 234:4 235:1 236:50 237:11 238:3 239:37
183 0:2 1:10 2:19 5:1 9:2 12:15 13:7 28:3 36:10 38:11 42:3 43:6 44:1 45:26 46:11 48:21 49:7 50:14 51:6 52:67 53:2 54:4 57:2 58:2 59:13 60:8 61:61 63:6 64:3 65:1 66:1 71:1 72:2 73:8 75:5 76:33 77:40 78:13 79:2 80:4 81:1 82:10 84:13 85:13 86:32 87:5 88:3 89:12 90:5 91:1 92:1 93:9 94:2 95:43 96:8 97:1 98:15 99:7 100:4 101:19 102:9 103:3 104:9 105:16 106:63 107:22 108:27 109:13 110:21 111:2 112:4 113:5 115:1 116:1 118:4 120:2 121:4 122:1 123:2 124:12 125:49 126:7 127:6 128:6 129:2 130:1 131:2 132:9 133:2 134:6 135:8 137:20 138:2 140:3 141:7 142:9 143:13 144:3 145:8 146:27 147:7 148:3 149:2 152:8 153:7 154:28 155:37 156:4 157:1 158:4 159:5 160:2 162:1 163:1 164:3 165:8 166:2 167:2 169:2 170:1 171:5 172:32 173:50 174:3 175:20 176:6 177:6 178:2 180:3 181:55 182:14 183:32 184:69 185:144 186:4 187:25 188:18 189:7 190:112 191:57 192:2 194:6 195:3 196:1 197:1 199:4 200:6 201:2 202:22 203:6 204:4 205:1 207:7 208:1 209:3 210:17 211:1 212:3 214:4 215:3 216:9 217:3 218:2 219:25 220:15 221:9 222:16 223:34 224:12 225:6 226:2 227:8 228:2 229:16 230:2 231:5 232:6 233:48 234:2 235:4 236:36 238:11 239:74

原数据规律:每行的第一个数为本行数据组的个数,如第一行,首个数字为176,即表示第一行共有176组“%d:%d”的数据。

要求:

  • 得到分别如testtrain_compare.txt和testtrain_result.txt中所示的数据格式文件。
  • 对于testtrain_compare.txt,去掉原数据testtrain.txt中的首个数据,如去掉第一行的176,去掉第二行的183。然后要求处理后的testtrain_compare.txt中每行的“%d:%d”的组数为240个,即从“0:%d”到“239:%d”。对于每行缺少的“%d:%d”,补上“%d:0”.如原数据testtrain.txt第一行没有“4:%d”,则补上“4:0”,其他的以此类推。即得到testtrain_compare.txt。
  • 对于testtrain_result.txt,在testtrain_compare.txt的基础上,只取每组数据“%d1:%d2”得的%d2,把“%d1:”去掉,即得到testtrain_result.txt。
  • (其实最终要得到的数据文件为testtrain_result.txt,testtrain_compare.txt只是思考过程出现的一个中间步骤,这里把testtrain_compare.txt拿出来只是让同学更好理解一些。)

处理后,testtrain_compare.txt部分数据格式如下:

0:3 1:3 2:5 3:1 4:0 5:1 6:0 7:1 8:0 9:0 10:1 11:1 12:24 13:13 14:8 15:9 16:0 17:4 18:0 19:27 20:0 21:1 22:0 23:0 24:0 25:0 26:0 27:0 28:12 29:0 30:0 31:0 32:1 33:0 34:0 35:0 36:14 37:0 38:0 39:0 40:0 41:0 42:0 43:0 44:14 45:0 46:0 47:0 48:15 49:95 50:1 51:24 52:19 53:5 54:7 55:5 56:0 57:49 58:24 59:11 60:0 61:12 62:2 63:0 64:5 65:2 66:11 67:6 68:0 69:0 70:0 71:1 72:9 73:23 74:10 75:25 76:22 77:25 78:23 79:8 80:3 81:7 82:7 83:2 84:23 85:28 86:65 87:10 88:3 89:7 90:6 91:7 92:5 93:9 94:13 95:29 96:1 97:3 98:15 99:4 100:5 101:9 102:6 103:0 104:24 105:3 106:13 107:7 108:2 109:9 110:21 111:1 112:0 113:0 114:6 115:4 116:1 117:0 118:0 119:0 120:0 121:13 122:0 123:11 124:16 125:15 126:3 127:0 128:0 129:7 130:3 131:5 132:31 133:9 134:5 135:5 136:13 137:0 138:0 139:1 140:4 141:7 142:7 143:4 144:8 145:64 146:12 147:6 148:3 149:38 150:35 151:2 152:3 153:6 154:11 155:1 156:26 157:16 158:12 159:9 160:0 161:0 162:0 163:5 164:10 165:0 166:0 167:0 168:0 169:1 170:1 171:12 172:16 173:24 174:10 175:7 176:14 177:8 178:1 179:2 180:15 181:33 182:29 183:15 184:0 185:21 186:1 187:55 188:11 189:9 190:64 191:3 192:0 193:0 194:4 195:42 196:3 197:16 198:16 199:0 200:0 201:2 202:9 203:28 204:56 205:0 206:12 207:28 208:12 209:14 210:7 211:11 212:16 213:0 214:0 215:0 216:6 217:13 218:3 219:10 220:20 221:2 222:15 223:19 224:22 225:12 226:3 227:4 228:12 229:33 230:9 231:0 232:5 233:16 234:4 235:1 236:50 237:11 238:3 239:37 
0:2 1:10 2:19 3:0 4:0 5:1 6:0 7:0 8:0 9:2 10:0 11:0 12:15 13:7 14:0 15:0 16:0 17:0 18:0 19:0 20:0 21:0 22:0 23:0 24:0 25:0 26:0 27:0 28:3 29:0 30:0 31:0 32:0 33:0 34:0 35:0 36:10 37:0 38:11 39:0 40:0 41:0 42:3 43:6 44:1 45:26 46:11 47:0 48:21 49:7 50:14 51:6 52:67 53:2 54:4 55:0 56:0 57:2 58:2 59:13 60:8 61:61 62:0 63:6 64:3 65:1 66:1 67:0 68:0 69:0 70:0 71:1 72:2 73:8 74:0 75:5 76:33 77:40 78:13 79:2 80:4 81:1 82:10 83:0 84:13 85:13 86:32 87:5 88:3 89:12 90:5 91:1 92:1 93:9 94:2 95:43 96:8 97:1 98:15 99:7 100:4 101:19 102:9 103:3 104:9 105:16 106:63 107:22 108:27 109:13 110:21 111:2 112:4 113:5 114:0 115:1 116:1 117:0 118:4 119:0 120:2 121:4 122:1 123:2 124:12 125:49 126:7 127:6 128:6 129:2 130:1 131:2 132:9 133:2 134:6 135:8 136:0 137:20 138:2 139:0 140:3 141:7 142:9 143:13 144:3 145:8 146:27 147:7 148:3 149:2 150:0 151:0 152:8 153:7 154:28 155:37 156:4 157:1 158:4 159:5 160:2 161:0 162:1 163:1 164:3 165:8 166:2 167:2 168:0 169:2 170:1 171:5 172:32 173:50 174:3 175:20 176:6 177:6 178:2 179:0 180:3 181:55 182:14 183:32 184:69 185:144 186:4 187:25 188:18 189:7 190:112 191:57 192:2 193:0 194:6 195:3 196:1 197:1 198:0 199:4 200:6 201:2 202:22 203:6 204:4 205:1 206:0 207:7 208:1 209:3 210:17 211:1 212:3 213:0 214:4 215:3 216:9 217:3 218:2 219:25 220:15 221:9 222:16 223:34 224:12 225:6 226:2 227:8 228:2 229:16 230:2 231:5 232:6 233:48 234:2 235:4 236:36 237:0 238:11 239:74 

处理后,testtrain_result.txt部分数据格式如下:

3 3 5 1 0 1 0 1 0 0 1 1 24 13 8 9 0 4 0 27 0 1 0 0 0 0 0 0 12 0 0 0 1 0 0 0 14 0 0 0 0 0 0 0 14 0 0 0 15 95 1 24 19 5 7 5 0 49 24 11 0 12 2 0 5 2 11 6 0 0 0 1 9 23 10 25 22 25 23 8 3 7 7 2 23 28 65 10 3 7 6 7 5 9 13 29 1 3 15 4 5 9 6 0 24 3 13 7 2 9 21 1 0 0 6 4 1 0 0 0 0 13 0 11 16 15 3 0 0 7 3 5 31 9 5 5 13 0 0 1 4 7 7 4 8 64 12 6 3 38 35 2 3 6 11 1 26 16 12 9 0 0 0 5 10 0 0 0 0 1 1 12 16 24 10 7 14 8 1 2 15 33 29 15 0 21 1 55 11 9 64 3 0 0 4 42 3 16 16 0 0 2 9 28 56 0 12 28 12 14 7 11 16 0 0 0 6 13 3 10 20 2 15 19 22 12 3 4 12 33 9 0 5 16 4 1 50 11 3 37 
2 10 19 0 0 1 0 0 0 2 0 0 15 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 10 0 11 0 0 0 3 6 1 26 11 0 21 7 14 6 67 2 4 0 0 2 2 13 8 61 0 6 3 1 1 0 0 0 0 1 2 8 0 5 33 40 13 2 4 1 10 0 13 13 32 5 3 12 5 1 1 9 2 43 8 1 15 7 4 19 9 3 9 16 63 22 27 13 21 2 4 5 0 1 1 0 4 0 2 4 1 2 12 49 7 6 6 2 1 2 9 2 6 8 0 20 2 0 3 7 9 13 3 8 27 7 3 2 0 0 8 7 28 37 4 1 4 5 2 0 1 1 3 8 2 2 0 2 1 5 32 50 3 20 6 6 2 0 3 55 14 32 69 144 4 25 18 7 112 57 2 0 6 3 1 1 0 4 6 2 22 6 4 1 0 7 1 3 17 1 3 0 4 3 9 3 2 25 15 9 16 34 12 6 2 8 2 16 2 5 6 48 2 4 36 0 11 74 


 源代码如下: 

/*************************************************************************
	> File Name: data_patch.c
	> Author: Geng
	> Mail: genglut@163.com
	> Created Time: Wed 05 Nov 2014 12:35:08 PM CST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
        FILE *filesrc, *filedest_compare, *filedest_result;
        int word1, word2, word3;
		//用于从源文件中格式化读取数据
		//word1用于存放数据组“%d1:%d2”的%d1
		//word2用于存放数据组“%d1:%d2”的%d2
		//word3存放每行的首个数据,即每行数据组的个数
		int i, j, zero, temp, tempswitch;
		i = 0;//用于和word3比较,判断是否到了行末尾
		j = 0;//用于和word1比较,判断行中是否缺少数据组
		zero = 0;//用于补全缺少的数据组,即“%d:0”
		temp = 0;
		//temp用于判断每行末尾数据组的word1少于239,因为每行处理后都应该有240个数据组
		tempswitch = 0;//用于判断是否该读取原数据文件的首个数据
        if((filesrc = fopen("testtrain.txt", "r")) == NULL)//原数据文件
		{
			perror("fopen");
			exit(EXIT_FAILURE);
		}
        if((filedest_compare = fopen("testtrain_compare.txt", "w")) == NULL)//处理后的第一个数据结果文件
		{
			perror("fopen");
			exit(EXIT_FAILURE);
		}		
		if((filedest_result = fopen("testtrain_result.txt", "w")) == NULL)//处理后的最终数据结果文件
		{
			perror("fopen");
			exit(EXIT_FAILURE);
		}		

        while(!feof(filesrc))//判断是否到了文件末尾
        {
			if(tempswitch == 0)//判断是否该读取原数据文件的首个数据
			{
				fscanf(filesrc, "%d", &word3);
				//word3存放每行的首个数据,即每行数据组的个数
			}
			tempswitch = 1;//已经读取了行的首个数据
			if(i == word3)//判断是否读完了一行
			{
			
				if(word1 < 239)//判断行末尾数据是否小于239
				{
					temp = word1;
					while(temp < 239)//补全缺少的数据组
					{
						temp++;
						fprintf(filedest_result, "%d ", zero);
						//将补全的数据输出到filedest_result
						fprintf(filedest_compare, "%d:%d ", temp, zero);
						//将补全的数据输出到数据输出到
					}
				}
				
				i = 0;//置0,重新作为读取下一行数据的判断条件
				j = 0;//置0,重新作为读取下一行数据的判断条件
				fprintf(filedest_result, "%s", "\n");
				//读完一行,向filedest_result写入换行符
				fprintf(filedest_compare, "%s", "\n");
				//读完一行,向filedest_compare写入换行符
				tempswitch = 0;//置0,用于判断读下一行的首个数据
				continue;
				//跳出本次循环,本次循环下面的代码将不再执行开始下次循环
			}			
			fscanf(filesrc, "%d:%d", &word1, &word2);//
			
 			if(j < word1)//判断是否缺少数据组,如果缺少,则补全缺少的数据组
			{
				while(j < word1)
				{
					fprintf(filedest_result, "%d ", zero);
					fprintf(filedest_compare, "%d:%d ", j, zero);
					j++;
				}
			}
 			
			fprintf(filedest_result, "%d ", word2);
			//向filedest_result写入数据
			fprintf(filedest_compare, "%d:%d ", word1, word2);
			//向filedest_compare写入数据
			i++;//开始下一个
			j++;//开始下一个
		}
        return 0;
}


原文链接:http://blog.csdn.net/geng823/article/details/40857487

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/gengzj/p/4675800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值