免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5251 | 回复: 9
打印 上一主题 下一主题

如何将一个较大文本文件分多次,连续读入内存进行处理? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-15 17:24 |只看该作者 |倒序浏览
#include "stdio.h"
#include "string.h"
main(int argc,char *argv[] )
{ int i=0;
  FILE *fp;
  void *buf;
  FILE *wr;
  long int j=0;
  if((fp=fopen("f:\\turboc2\\program\\test1.txt","r")==NULL)
  {
    printf("Cannot open file";
    exit(1);
  }
  wr=fopen("f:\\turboc2\\program\\file.txt","w";
  for(i=0;i<2;i++)
  {
  fseek(fp,ftell(fp),SEEK_SET);
    fread(buf,sizeof(char),100,fp);
    /*fwrite(buf,524288,100,wr); */
    printf("%s",buf);

  }
  fclose(fp);
  fclose(wr);
}
输出:
Frame 1 (283 bytes on wire, 283 bytes captured)
    Arrival Time: May 20, 2004 14:20:55.158823000
  1355-03  Time delta from previous packet: 0.000000000 seconds
    Time since reference or first frame: 0.001355-030000000 seconds
    Frame Number: 1
    Packet Length: 283 bytes
    Capture Length: 283 bytes
Ether1355-03net II, Src: 00:04:9b:1a:c0:00, Dst: 00:09:b6:16:48:ca
    Destination: 00:09:b6:16:48:ca (Cisco_16:1355-0348:ca)
    Source: 00:04:9b:1a:c0:00 (Cisco_1a:c0:00)
    Type: IP (0x0800)
Internet Protocol, Src A1355-03ddr: 211.136.70.90 (211.136.70.90), Dst Addr: 211.136.70.13 (211.136.70.13)
    Version: 4
    Heade1355-03r length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        01355-03

最后的结果是多读入了一个不知道哪里来的字符串"01355-03",这个字符串文本文件中并不存在,这是为什么呢?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-06-15 17:33 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

那是个手机号码。

论坛徽章:
0
3 [报告]
发表于 2004-06-15 17:36 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

那时flw的单车牌号。

论坛徽章:
0
4 [报告]
发表于 2004-06-15 17:52 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

1、在 windows 下,以 二进 方式打开的文件才能用 fread

2、fread 进来的东西不应该用 printf ("%s"... 输出。

3、我看你的文件是 ascii 的,建议用 ascii方式打开,用 fgets 读,fputs 输出。

论坛徽章:
0
5 [报告]
发表于 2004-06-15 17:59 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

fread是可以读入文本文件的,fgets能整块读文件吗?该文件有500M!!

论坛徽章:
0
6 [报告]
发表于 2004-06-15 18:02 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

fread 当然可以读入文本,但fread 只能操纵二进流,所以 fopen 的时候,用 "rb"。

如果文件有 500M 之大,建议用 fread 和 fwrite.

论坛徽章:
0
7 [报告]
发表于 2004-06-15 18:09 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

谢谢斑竹天使!那我第一次读入文件的一段,如何纪录该段的位置,并在下次读入时从所记录的位置读起?

论坛徽章:
0
8 [报告]
发表于 2004-06-15 18:32 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

如果明白了“文件指针”的概念,你就不会问上面的问题了。

论坛徽章:
0
9 [报告]
发表于 2004-06-15 19:52 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

[quote]原帖由 "yuermoon"]谢谢斑竹天使!那我第一次读入文件的一段,如何纪录该段的位置,并在下次读入时从所记录的位置读起?[/quote 发表:


文件指针指向一个结构,结构中有分量记录了当前位移。当用 fread 读入一块后,位移值会被自动更新,所以你无需为此担心。

论坛徽章:
0
10 [报告]
发表于 2004-06-16 15:43 |只看该作者

如何将一个较大文本文件分多次,连续读入内存进行处理?

太大的文件,或许会用到系统相关的函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP