• 创建结构体存储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) 百万数据秒读数据的更多相关文章

  1. [Linux]read/write和fread/fwrite有什么区别

    转自:http://blog.csdn.net/xiaofei0859/article/details/51145051 二者都是对文件进行操作,那么二者有什么区别,用的时候该如何选择呢? 1. 区别 ...

  2. 使用Javascript/jQuery将javascript对象转换为json格式数据 - 海涛的CSDN博客 - 博客频道 - CSDN.NET

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  3. (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585

    为梦飞翔   (转载)RTMP协议中的AMF数据 http://blog.csdn.net/yeyumin89/article/details/7932585 这里有一个连接,amf0和amf3的库, ...

  4. sql处理百万级以上的数据提高查询速度的方法

    原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...

  5. 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置

     数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby     数据抓取是一门艺术,和其他软件不同,世界上 ...

  6. echarts异步数据加载(在下拉框选择事件中异步更新数据)

    接触echarts 大半年了,从不会到熟练也做过不少的图表,隔了一段时间没使用这玩意,好多东西真心容易忘了.在接触echarts这期间也没有总结什么东西,今天我就来总结一下如何在echart中异步加载 ...

  7. 关于mysql处理百万级以上的数据时如何提高其查询速度的方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  8. python小知识-属性查询优先级(如果有同名类属性、数据描述符、实例属性存在的话,实例>类>数据描述符)

    https://www.cnblogs.com/Jimmy1988/p/6808237.html https://segmentfault.com/a/1190000006660339 https:/ ...

  9. 《转》sql处理百万级以上的数据提高查询速度的方法

    处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考 ...

随机推荐

  1. ECNUOJ 2855 贪吃蛇

    贪吃蛇 Time Limit:1000MS Memory Limit:65536KBTotal Submit:480 Accepted:109 Description  相信很多人都玩过这个游戏,当然 ...

  2. 洛谷 P2104 二进制

    P2104 二进制 题目描述 小Z最近学会了二进制数,他觉得太小的二进制数太没意思,于是他想对一个巨大二进制数做以下 4 种基础运算: 运算 1:将整个二进制数加 1 运算 2:将整个二进制数减 1 ...

  3. 二 MapReduce 各阶段流程分析

    如果想要将问题变得清晰.精准和优雅, 需要关注 MapReduce 作业所需要的系统资源,尤其是集群内部网络资源使用情况. MR 可以运行在共享集群上处理 TB 级 甚至 PB 级的数据.同时,改作业 ...

  4. ArcGIS api for javascript——显示多个查询结果

    描述 本例展示了在重叠的多边形处理查询的一种方式.单击一个石油和天然气的字段来查看地图上的高亮显示.如果仅仅点击一个要素,能够在单击一次来查看包含一些属性的InfoWindow.如果偶然单击到重叠的要 ...

  5. [Poi] Use Markdown as React Components by Adding a Webpack Loader to Poi

    Poi ships with many webpack loaders included, but you may run into scenarios where you'll need to cu ...

  6. Nios II 系统时钟timestamp的应用

    在用Nios II做外设时序驱动的时候,经常会用延时函数.有时会常使用某个FPGA芯片和时钟,比如笔者一直使用的芯片是cyclone系列 EP2C35F484C8N,PLL输入SOPC时钟是50M.因 ...

  7. BZOJ5029: 贴小广告 & BZOJ5168: [HAOI2014]贴海报

    [传送门:BZOJ5029&BZOJ5168] 简要题意: 给出m段区间l[i],r[i],表示l[i]到r[i]的数全部变成i,求出最后有多少种不同的数 题解: 线段树+离散化 这是一道经典 ...

  8. 机器学习(四) 分类算法--K近邻算法 KNN (上)

    一.K近邻算法基础 KNN------- K近邻算法--------K-Nearest Neighbors 思想极度简单 应用数学知识少 (近乎为零) 效果好(缺点?) 可以解释机器学习算法使用过程中 ...

  9. (转载)http协议的Request Payload 和 Form Data 的区别

    我正在开发的项目前端和后端是完全独立的,通过配置 webpack 的 proxy 将前端请求跨域代理到后台服务.昨天发现,我前端执行 post 请求,后台 springmvc 的 @RequestMa ...

  10. C/C++(C++类型增强)

    C++类型增强 类型检查更严格 把一个const类型的指针赋给非const类型的指针.c语言中可以通的过,但是在c++中则编不过去 const int a = 10; a = 100;//const修 ...