导航:首页 > 网络数据 > c语言读大数据

c语言读大数据

发布时间:2023-06-03 15:49:44

❶ c语言处理文件里的大数据

只能分块处理了,读入一块、处理一块、存储一块,数据库就是这么干的。

❷ 如何用c语言高效的读取一个很大的txt数据文件

#include <stdio.h>
#include <string.h>

#define MAXSIZE 4000000

struct password {
char psw[12]; // 密码名称
int counter; // 出现次数计数器
};

int Append(struct password a[], int *n, char psw[]) {
int i;
for(i = 0; i < *n; ++i) {
if(strcmp(a[i].psw,psw) == 0) {
++a[i].counter;
return 2;
}
}
if(*n < MAXSIZE) {
strcpy(a[*n].psw,psw);
a[*n].counter = 1;
++(*n);
return 1;
}
return 0;
}

int main() {
struct password a[MAXSIZE];
char psw[12];
int i,n = 0,id;
char infilename[] = "indata.txt";
char outfilename[] = "outdata.txt";
FILE *inf,*outf;
if((inf = fopen(infilename,"rt")) == NULL) {
printf("不能打开数据文件:%s。\n",infilename);
return 1;
}
while(fscanf(inf,"%d %11s",&id,psw) == 2) {
if(Append(a,&n,psw) == 0) break;
}
fclose(inf);
if((outf = fopen(outfilename,"wt")) == NULL) {
printf("不能打开数据文件:%s。\n",outfilename);
return 2;
}
for(i = 0; i < n; ++i)
fprintf(outf,"%s %d\n",a[i].psw,a[i].counter);
fclose(outf);
return 0;
}
估计可能是数组越界,修改如下:
int Append(struct password a[], int *n, char psw[]) {
int i;
for(i = 0; i < *n && i < MAXSIZE; ++i) {
if(strcmp(a[i].psw,psw) == 0) {
++a[i].counter;
return 2;
}
}
if(*n < MAXSIZE) {
strcpy(a[*n].psw,psw);
a[*n].counter = 1;
++(*n);
return 1;
}
return 0;
}

❸ C语言高速读大文件、写大文件的方式

写文件一般是追加快些
如果你要输出例如XML。
还有,每个进程应该有4G,靠操作系统内版存管理+页面文件权维持、
还有,开个几百M的数组不划算、用malloc+free快些,可以动态的,不让操作系统在加载时就开辟几百M,而是陆续的开——除非你在写汇编程序——汇编向OS申请内存很费劲,要 SYSCALL

❹ C语言快速读取超大数组的问题

关键不在于你要把它读进去。
而在于:
1.文件哪来的,有办法不用那么大的文件么?建立文件的时候不能建立一个索引么?或者用一个便于访问的格式么?
2.文件要用来干什么?CPU一次只能处理几个字节,你为什么要把它全读到内存里呢?

如果第1条不能解决,也就是最坏的情况,那么建议:
做一个转换器,把原始文件转换成便于操作的文件再进行处理。所谓便于操作,就是说,每一行数据的大小固定,因而可以对数据进行快速访问。转一行存一行,不会花太多内在。需要一定的转换时间,但是因为可以预估,所以界面上可以做一个转换进度来降低用户的主观等待时间。

PS:至于你是把转换后的数据存到文件进行访问,还是用映射的方式把文件映射到内存来读写,实质上差不多,不过后者可能有系统提供的缓存机制来提高效率。但是本质上一样的:转换成临时文件、使用;或者干脆就是用专门的程序转换出新文件,再用处理程序去处理。看场合了。

如果你的文件是存储在顺序存储器中,比如磁带上:
那么差不多意思,想办法把数据转存到你的磁盘上,然后再进行随机访问。

补充::::关于内存映射:见上面的PS内容,先把文件转成可随机访问格式(比如我说要哪一行数据,你就立刻能找到/算出,而不是从头一行一行去找),然后再做内存映射。
另外,Windows下和Linux下的内存映射有所不同,但是基本上不难,可以直接搜索找到照搬。

❺ 如何使用C语言实现大数据体的动态读取与处理

在内存中开辟两个缓存区,大小?比如每个缓存32M,然后将数据读入输入缓存处理版,处理后的结果送输权出缓存
这里的关键问题是如何对缓存进行管理?总体思路是,当缓存中有数据时,则取数据进行处理,处理好后放输出缓存,同时还必须检测,当输出缓存数据快满时,能够及时将数据送入硬盘。。。

上面是大体思路,实际中,一般运用多线程处理这种情况,即一个线程负责管理输入缓存,一个线程负责管理输出缓存,第三个线程负责数据处理。。。具体管理策略有很多,你需要综合各种因素(比如时间宽余度等)来决定。。。

❻ c语言如何输入很大的数据

测试数据一定是保存在文件中的
只要使用while语句,分段把数字读出来,然后各位数相加,再mod 3求余

可以读一段,把这些数字相加,然后再求余,然后再读一段。。。
这样的过程,就可以把超大数据解决了~

阅读全文

与c语言读大数据相关的资料

热点内容
win101704游戏闪屏 浏览:461
深孔钻编程软件哪个好 浏览:756
怎么上传百度文件下载 浏览:203
wordpress做的学校网站 浏览:314
xp系统启动之后网络图标 浏览:184
excel打开其他文件打不开 浏览:634
苹果手机听新闻哪个app好 浏览:165
notepad大文件 浏览:813
数据线由哪个厂家代工 浏览:580
javawebservice实例 浏览:70
连接远程数据库需要什么配置文件 浏览:669
discuz版本 浏览:209
如何还原文件格式 浏览:186
win10可以装ansys10吗 浏览:703
以前的系统文件删除了电脑会快吗 浏览:612
查看dmp文件版本号 浏览:922
pl2303win10驱动 浏览:295
体脂秤上数据哪个是体脂 浏览:691
文件修改ao表示什么 浏览:493
日历iphone 浏览:547

友情链接