索引与文本文件

索引与文本文件

1.索引

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//获取多少行,创建数组a[N]
//获取每一行的宽度a[N]=width
//读取的每一个字符串都有\r\n
struct index
{
    int *pindex;
    int length;
}allindex;

int getN()
{
    int i = -1;
    FILE *pf = fopen("test.txt", "rb");//\r\n->\n
    if (pf==NULL)
    {
        return -1;
    }
    else
    {
        int alllength = 0;
        i = 0;
        while (!feof(pf))
        {
            char str[50] = { 0 };
            fgets(str, 50, pf);
            alllength += strlen(str);
            printf("%d  %d   %s ",strlen(str),i, str);
            i++;
        }
        printf("\nall=%d", alllength);
        fclose(pf);
        return i;
    }
}
void initindex()
{
    int i = -1;
    FILE *pf = fopen("test.txt", "rb");//\r\n->\n
    if (pf == NULL)
    {
        return -1;
    }
    else
    {
        int alllength = 0;
        i = 0;

        while (!feof(pf))
        {
            char str[50] = { 0 };
            fgets(str, 50, pf);

            allindex.pindex[i] = alllength;
            alllength += strlen(str);

            printf("\ni=%d,index[%d]=%d,with=%d", i, i, allindex.pindex[i], strlen(str));
            i++;

        }
        fclose(pf);
        return i;
    }

}

void main()
{
    allindex.length = getN();
    printf("\nhang=%d", allindex.length);
    allindex.pindex = calloc(allindex.length, sizeof(int));
    initindex();

    FILE *pf = fopen("test.txt", "rb");
    while (1)
    {
        int num = 0;
        scanf("%d", &num);
        fseek(pf,allindex.pindex[num] , SEEK_SET);
        char str[128] = { 0 };
        fgets(str, 128, pf);//读取
        printf("%s", str);

    }
    fclose(pf);

    system("pause");
}

2.大数据索引

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

//读取大数据多少行
//int a[N] ,堆上
//写入到文件
//索引文件载入内存
//随机读
char path[256] = "Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\1E~001OK.txt";
char indexpath[256] = "Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\1Eindex.txt";
#define N 84331542

struct index
{
    int *pindex;//地址
    int length;//长度
}allindex;

void init(char *path)
{
    printf("\n索引数组开始分配");
    allindex.length = N;
    allindex.pindex = calloc(N, sizeof(int));//分配内存
    printf("\n索引数组完成分配");

    printf("\n开始读取");
    FILE *pf = fopen(path, "rb");//\r\n->\n
    if (pf == NULL)
    {
        return -1;
    }
    else
    {
        int alllength = 0;
        for (int i = 0; i < N;i++)
        {
            char str[50] = { 0 };
            fgets(str, 50, pf);
            allindex.pindex[i] = alllength;//错位从0开始

            int length = strlen(str);
            alllength += length;

        }

        fclose(pf);
    }
    printf("\n结束读取");

    printf("\n开始写入");
    FILE *pfw = fopen(indexpath, "wb");//写入索引
    fwrite(allindex.pindex, sizeof(int), allindex.length, pfw);
    fclose(pfw);//关闭
    printf("\n结束写入");

    free(allindex.pindex);

    printf("\n开始读取");
    FILE *pfr1 = fopen(indexpath, "rb");//写入索引
    fread(allindex.pindex, sizeof(int), allindex.length, pfr1);
    fclose(pfr1);//关闭
    printf("\n结束读取");

}
void qucik()
{
    printf("\n索引数组开始分配");
    allindex.length = N;
    allindex.pindex = calloc(N, sizeof(int));//分配内存
    printf("\n索引数组完成分配");

    printf("\n开始读取");
    FILE *pfw = fopen(indexpath, "rb");//写入索引
    fread(allindex.pindex, sizeof(int), allindex.length, pfw);
    fclose(pfw);//关闭
    printf("\n结束读取");
}

int getN(char *path)
{
    int i = -1;
    FILE *pf = fopen(path, "rb");//\r\n->\n
    if (pf == NULL)
    {
        return -1;
    }
    else
    {
        i = 0;
        while (!feof(pf))
        {
            char str[50] = { 0 };
            fgets(str, 50, pf);

            i++;
        }

        fclose(pf);
        return i;
    }
}

void main1x()
{

    //printf("%d", getN(path));
    //init(path);
    qucik();

    FILE *pf = fopen(path, "rb");
    while (1)
    {
        printf("\n请输入要读取的行数");
        int num = 0;
        scanf("%d", &num);

        fseek(pf, allindex.pindex[num], SEEK_SET);
        char str[128] = { 0 };
        fgets(str, 128, pf);//读取
        printf("\n%s", str);

    }
    fclose(pf);

    system("pause");
}

void main()
{

    FILE *pf1= fopen(indexpath, "rb");
    FILE *pf2 = fopen(path, "rb");
    while (1)
    {
        printf("\n请输入要读取的行数");
        int num = 0;
        scanf("%d", &num);

        int indexnum = 0;
        fseek(pf1,num*sizeof(int) , SEEK_SET);
        fread(&indexnum, sizeof(int), 1, pf1);//读索引到indexnum

        fseek(pf2, indexnum, SEEK_SET);
        char str[128] = { 0 };
        fgets(str, 128, pf2);//读取
        printf("\n%s", str);

    }
    fclose(pf1);
    fclose(pf2);

    system("pause");
}
时间: 2024-12-12 10:27:06

索引与文本文件的相关文章

理解Lucene索引与搜索过程中的核心类

理解索引过程中的核心类 执行简单索引的时候需要用的类有: IndexWriter.?Directory.?Analyzer.?Document.?Field 1.IndexWriter IndexWriter(写索引)是索引过程的核心组件,这个类负责创建新的索引,或者打开已有的索引,以及向索引中添加.删除或更新被索引文档的信息,但不能读取或搜索索引.IndexWriter需要开辟一定的空间来存储索引,该功能由Directory完成 2.Directory /** A Directory is a

iOS基于B站的IJKPlayer框架的流媒体探究

学习交流及技术讨论可新浪微博关注:极客James 一.流媒体 流媒体技术从传输形式上可以分为:渐进式下载和实施流媒体. 1.渐进式下载 它是介于实时播放和本地播放之间的一种播放方式,渐进式下载不必等到全部下载完成后在播放,可以边下载边播放,播放完成后,整个文件会保存下来.从用户的体验上合播放方的效果来看,渐进式下载和实时流媒体没有什么区别,不过是渐进式下载保留有文件在本地.下面来介绍下渐进式下载的开发 渐进式下载的API和本地播放的API没有什么太大的区别,可以使用MediaPlayer框架中得

m3u8文件简介

1.   M3U8文件概念 M3U8文件是指UTF-8编码格式的M3U文件.M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放. 2.   M3U8文件举例 例如使用云图TV点播直播节目时,发送请求: http://121.199.63.236:7613/m3u8/cckw1/szws.m3u8?from=bab&fun=yes&chk=y&chunk=xax&ppw=yuntutv&aut

iOS开发-开发总结(四)

一:send和awk解释 sed -n p filenamesed ----------------------------是一个流编辑器(stream editor) awk ‘BEGIN {print “Hellow"}'awk --------是一种用于处理文本的编程语言工具. 二:传值方式总结 KVO底层会动态长生新的类,只能坚挺属性(一个对象的属性能背多个兑现监听,一个对象能监听多个对象的其他属性) kvc/kvo底层是基于runtime 代理,规范,代码多:一对一 通知,发送和接收:

Lucene 简单手记http://www.cnblogs.com/hoojo/archive/2012/09/05/2671678.html

什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式.这个过程类似于通过字典中的检索字表查字的过程. 全 文检索的方法主要分为按字检索和按词检索两种.按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合.对于各种不同的语言而言,字有不 同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别.按词

iOS开发——淫技篇&amp;iOS开发中各种淫技总结(三)

iOS开发中各种淫技总结(三) 一:send和awk解释 sed -n p filenamesed ----------------------------是一个流编辑器(stream editor) awk ‘BEGIN {print “Hellow"}'awk --------是一种用于处理文本的编程语言工具. 二:传值方式总结 KVO底层会动态长生新的类,只能坚挺属性(一个对象的属性能背多个兑现监听,一个对象能监听多个对象的其他属性) kvc/kvo底层是基于runtime 代理,规范,代

WEB前端资源代码:问题篇

1.web扫码登录怎么实现,思路? 步骤 WEB平台 手机 第1步 生成二维码 第2步 (ajax监控后台) 扫码 第3步 (ajax监控后台) 确定(后台异步通知WEB平台) 第4步 AJAX发现状态改变,登陆成功 ajax监控后台的流程:生成二维码后 setTimeout(function(){ //AJAX请求,检测状态 },5000); 整体思路: 1.前端调用后台生成二维码的API,获取到二维码图片和所包含的信息(通常是一个唯一ID) 2.前端检测(通过轮询或者websock,自己选择

多媒体文件格式(三):M3U8 格式

一.M3U8 格式标准介绍 M3U8文件是指UTF-8编码格式的M3U文件.M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放. M3U8是一种常见的流媒体格式,主要以文件列表的形式存在,既支持直播又支持点播,尤其在Android.iOS等平台最为常用. 下面是CCTV6直播播放地址:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8的M3U8的文件列表: #EXTM3U #EXT-X-VER

Python爬取视频指南

摘自:https://www.jianshu.com/p/9ca86becd86d 前言 前两天尔羽说让我爬一下菜鸟窝的教程视频,这次就跟大家来说说Python爬取视频的经验 正文 https://www.cniao5.com/ 菜鸟窝上有很多教程视频,但是这些视频好像没有直接的下载地址,而且有些教程视频还是有期限的,那么问题就产生了我看的速度比较慢而且视频又很多,没等我看完视频就到期了怎么办?这时候写一个爬虫将这些教程视频下载下来就很好地解决了这个问题 当然,对于某些视频网站的VIP电影.视频