57.大数据线性处理csdn数据(fread,fwrite) 百万数据秒读数据
- 创建结构体存储csdn数据
struct csdn
{
char name[];
char password[];
char email[]; }; - 对于分配的大小要先获取最大的长度,定义如下
//姓名最大长度
int namemax = -;
//密码最大长度
int passmax = -;
//邮件最大长度
int mailmax = -;//获取各部分最大长度
void getmax(char *str)
{
//遍历,把所有'#'转化成'\0'
for (char *p = str; *p != '\0'; p++)
{
if (*p == '#')
{
*p = '\0';
}
}
//max1:姓名的长度
int max1 = strlen(str);
if (max1>namemax)
{
namemax = max1;
}
//max2:密码的长度
char *pstr1 = str + strlen(str) + ;
int max2 = strlen(pstr1);
if (max2>passmax)
{
passmax = max2;
} //max3:email的长度
char *pstr2 = pstr1 + strlen(pstr1) + ;
int max3 = strlen(pstr2);
if (max3>mailmax)
{
mailmax = max3;
}
} - fgets读取到的数据写入到结构体中
//字符串初始化结构体
void init(struct csdn *pdata, char *str)
{
//遍历,把所有'#'转化成'\0'
for (char *p = str; *p != '\0';p++)
{
if (*p=='#')
{
*p = '\0';
}
}
//把姓名copy到结构体中
strcpy(pdata->name, str);
//加字符串长度到字符串后一位'\0',再加1到下一个字符串起始位置
char *pstr1 = str + strlen(str) + ;
//把密码copy到结构体中
strcpy(pdata->password, pstr1);
char *pstr2 = pstr1 + strlen(pstr1) + ;
//把email copy到结构体中
strcpy(pdata->email, pstr2);
} - 读取文件并写入到结构体中,然后在把结构体写到文件中
//写入数据
void readfiletxt()
{
//读取文件
FILE *pfr = fopen("csdn.txt", "r");
//以二进制方式写文件
FILE *pfw = fopen("csdn.bin", "wb"); //如果打开失败则返回
if (pfr==NULL)
{
return;
}
//否则写数据
else
{
//如果没有到文件末尾
while (!feof(pfr))
{
//存取读取到的数据
char str[] = { };
//读取一行
fgets(str, , pfr);
//创建结构体
struct csdn csdn1;
//把读取到到的数据写到结构体中
init(&csdn1, str);
//把结构体写入文件
fwrite(&csdn1, sizeof(struct csdn), , pfw);//写入
} }
//关闭文件
fclose(pfr);
fclose(pfw);
} - 测试代码
void main()
{ FILE *pf = fopen("csdn.bin", "rb+");
while ()
{
printf("请输入你要读取的第N个元素:");
int N;
scanf("%d", &N); struct csdn csdn1 = {};
//移动到相应的结构体位置(注意:fwrite写入的必须是同一种类的,这样才好读取)
fseek(pf, sizeof(struct csdn)*(N - ), SEEK_SET);
//读取
fread(&csdn1, sizeof(struct csdn), , pf);
//输出结果
printf("\n%s,%s,%s", csdn1.name, csdn1.password, csdn1.email);
}
fclose(pf);
system("pause");
}
完整代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> //csdn结构体
struct csdn
{
char name[];
char password[];
char email[]; };
//姓名最大长度
int namemax = -;
//密码最大长度
int passmax = -;
//邮件最大长度
int mailmax = -; //字符串初始化结构体
void init(struct csdn *pdata, char *str)
{
//遍历,把所有'#'转化成'\0'
for (char *p = str; *p != '\0';p++)
{
if (*p=='#')
{
*p = '\0';
}
}
//把姓名copy到结构体中
strcpy(pdata->name, str);
//加字符串长度到字符串后一位'\0',再加1到下一个字符串起始位置
char *pstr1 = str + strlen(str) + ;
//把密码copy到结构体中
strcpy(pdata->password, pstr1);
char *pstr2 = pstr1 + strlen(pstr1) + ;
//把email copy到结构体中
strcpy(pdata->email, pstr2);
} //获取各部分最大长度
void getmax(char *str)
{
//遍历,把所有'#'转化成'\0'
for (char *p = str; *p != '\0'; p++)
{
if (*p == '#')
{
*p = '\0';
}
}
//max1:姓名的长度
int max1 = strlen(str);
if (max1>namemax)
{
namemax = max1;
}
//max2:密码的长度
char *pstr1 = str + strlen(str) + ;
int max2 = strlen(pstr1);
if (max2>passmax)
{
passmax = max2;
} //max3:email的长度
char *pstr2 = pstr1 + strlen(pstr1) + ;
int max3 = strlen(pstr2);
if (max3>mailmax)
{
mailmax = max3;
}
} //写入数据
void readfiletxt()
{
//读取文件
FILE *pfr = fopen("csdn.txt", "r");
//以二进制方式写文件
FILE *pfw = fopen("csdn.bin", "wb"); //如果打开失败则返回
if (pfr==NULL)
{
return;
}
//否则写数据
else
{
//如果没有到文件末尾
while (!feof(pfr))
{
//存取读取到的数据
char str[] = { };
//读取一行
fgets(str, , pfr);
//创建结构体
struct csdn csdn1;
//把读取到到的数据写到结构体中
init(&csdn1, str);
//把结构体写入文件
fwrite(&csdn1, sizeof(struct csdn), , pfw);//写入
} }
//关闭文件
fclose(pfr);
fclose(pfw);
} void main()
{ FILE *pf = fopen("csdn.bin", "rb+");
while ()
{
printf("请输入你要读取的第N个元素:");
int N;
scanf("%d", &N); struct csdn csdn1 = {};
//移动到相应的结构体位置(注意:fwrite写入的必须是同一种类的,这样才好读取)
fseek(pf, sizeof(struct csdn)*(N - ), SEEK_SET);
//读取
fread(&csdn1, sizeof(struct csdn), , pf);
//输出结果
printf("\n%s,%s,%s", csdn1.name, csdn1.password, csdn1.email);
}
fclose(pf);
system("pause");
}
57.大数据线性处理csdn数据(fread,fwrite) 百万数据秒读数据的更多相关文章
- [Linux]read/write和fread/fwrite有什么区别
转自:http://blog.csdn.net/xiaofei0859/article/details/51145051 二者都是对文件进行操作,那么二者有什么区别,用的时候该如何选择呢? 1. 区别 ...
- 使用Javascript/jQuery将javascript对象转换为json格式数据 - 海涛的CSDN博客 - 博客频道 - CSDN.NET
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585
为梦飞翔 (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585 这里有一个连接,amf0和amf3的库, ...
- sql处理百万级以上的数据提高查询速度的方法
原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...
- 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上 ...
- echarts异步数据加载(在下拉框选择事件中异步更新数据)
接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- python小知识-属性查询优先级(如果有同名类属性、数据描述符、实例属性存在的话,实例>类>数据描述符)
https://www.cnblogs.com/Jimmy1988/p/6808237.html https://segmentfault.com/a/1190000006660339 https:/ ...
- 《转》sql处理百万级以上的数据提高查询速度的方法
处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考 ...
随机推荐
- ZooKeeper 特性
ZooKeeper 拥有一个层次的命名空间.(like distributed) 注意:ZooKeeper 中不许使用相对路径. 一 ZooKeeper 数据模型 ...
- “Vbox安装CentOS系统”之低级错误一例:版本号的选择
日 期:2014年7月18日 错误描写叙述:虚拟机系统版本号选择错误,导致无法引导进入光盘安装 错误重演: 因为混淆了centos和rehat的版本号概念.错把centos作为一种新的版 ...
- java设计模式学习 ----- 单例模式(Singleton)
单例模式(Singleton) 单例对象(Singleton)是一种经常使用的设计模式. 在Java应用中,单例对象能保证在一个JVM中,该对象仅仅有一个实例存在.单例模式也分三种:懒汉式单例.饿汉式 ...
- vim 基础学习之文件跳转
1. ''-当前文件上次跳转之前的位置2. '.-当前文件上次修改的位置,只要是发生了可能导致变化的命令操作就会被标记,哪怕实际结果没有变化3. '^-当前文件上次插入的位置,只要是发生了插入操作命令 ...
- springboot 使用mybatis 通用Mapper,pagehelper
首先需要maven导入需要的包,这里用的是sqlserver,druid,jtds连接数据库 <dependency> <groupId>com.alibaba</gro ...
- python单元测试-unittest
python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...
- selenium+python 安装使用
一.序言 selenium官网selenium简单教程selenium完整教程python基础教程 二.安装python3 https://www.python.org/downloads/relea ...
- Python之路:画空心矩形
1.if语句中当要判断多个语句成立才能执行语句时候,可以用or(或,只要其中一个成立就可以执行下一条语句)或者and(只要有其中一个不成立就不会执行下一条语句) 2.在Python中range函数会产 ...
- or in 、Object.keys()以及Object.getOwnPropertyNames有什么区别?
or in .Object.keys()以及Object.getOwnPropertyNames的区别 var obj= Object.create(parent, { b: { value: 2, ...
- hzwer 模拟题 祖孙询问
祖孙询问 题目描述 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. 输入输出格式 输入格式: 输入第一行包括一个整数n表示节点个数. 接下来n行每行一 ...