如何对TXT数据文件的深度操作

lpc13579 2017-10-25 10:15:16
请问这些要求如何实现?

...全文
242 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-10-27
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
有人又开始狡辩了。
看看楼主发的另一个帖子: http://bbs.csdn.net/topics/392278394 这是楼主帖子中的一段文字: 欲操作的文件大概5万多行,3兆左右大小,在较快的电脑上运行,大概需要140秒左右。 再看看我在2楼中的那个贴图: 我的那个代码,读取的是两个文件,第1个3.43MB、20万行数据;第2个175KB,1万行数据。 总共才140毫秒。 然而楼的的代码,也是“3M左右、5万多行”,得用140秒的时间。 你睁大眼睛看看,这速度相差多少倍?究竟是方法重要,还是“是否有碎片”重要??? 这快上千倍(甚至可以说是“4千倍”)的速度,是“消除碎片”能达到的效果吗!!!!! 要知道:我的是机械硬盘,并且还是5400转的笔记本硬盘!!!!
舉杯邀明月 2017-10-27
  • 打赏
  • 举报
回复
引用 11 楼 bakw 的回复:
传个样本文件上来,让大侠们展展身手,看谁的程序跑的快。
楼主都已经失踪了…………
舉杯邀明月 2017-10-27
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
有人又开始狡辩了。
究竟是谁在狡辩,相依大家都看得明白! 对于“同一个人”来说,是机械硬盘还是SSD、如果是机械硬盘,文件是有碎片还是无碎片,这个基本上是“确定”的。 在使用的是机械硬盘、并且有碎片的情况下,难不成照你的“指导思想”: 别忙……我要处理的文件肯定是“有碎片的了”,为了加快读取速度,整理一下磁盘碎片再运行处理程序………… 你不想想:为了整整“碎片”,得花费半小时、几小时…… (现在磁盘、分区“容量”基本都是比较大的,当分区内文件多、空间占用量比较大时,整理碎片会要很长时间) 但整理后,读取时间也不过就是缩短了区区几秒、甚至零点几秒而已!!!! 就为了“节省”这个微不足道的“时间消费”,却在另一件事上去投入了几百倍、几千上万倍的“时间成本”, 你是猪啊!!!!
赵4老师 2017-10-27
  • 打赏
  • 举报
回复
contig是整理指定文件的磁盘碎片,不是整理整个逻辑盘的磁盘碎片。
赵4老师 2017-10-26
  • 打赏
  • 举报
回复
有人又开始狡辩了。
舉杯邀明月 2017-10-26
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
在文件大小相同的前提下: 读刚读过的文件比头次读没读过的文件快 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快 读没有磁盘碎片的文件比读有磁盘碎片的文件快 读文件不处理比边读边处理快 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上) 读固态硬盘上的文件比读普通硬盘上的文件快 您是否希望迅速对您频繁使用的文件进行碎片整理?使用 Contig 优化单个的文件,或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428 如果楼主使用的是机械硬盘,使用contig将要处理的大文件整理成连续的扇区后,速度如果变快了,请Chen8013给我支付宝zhao4zhong1@163.com转人民币100元。
舍本逐末!!!! 机械硬盘上,你的“无碎片文件”,能比“有碎片的文件”,读取速度上快得了多少??? 恐怕提升不了20%吧!你有样又能“节约”多少时间呢…… 比如几百MB的文件,相差不到1秒,根本就是可以忽略不计的东西。  就算你“读得快点”又能怎样!!!! 很可能“数据处理时间”占主要部分,那么“算法优化”才是关键! 比如楼主提供一个300MB的样本文件: 就算你用的是固态硬盘、读文件只用了0.5秒,可惜你“处理数据”用了30秒,加上输出文件(给你算1秒吧),你总共耗时31.5秒。 我用的是机械硬盘、读文件用了5秒,但我处理数据只用了10秒,再算上输出文件(两个文件,算6秒吧),我也只用了21秒的时间。 最终事实上,我的“代码”速度比你的快多了…………
of123 2017-10-26
  • 打赏
  • 举报
回复
实际上不是删除操作,而是选择输出。 1 打开源文件作为输入,打开 PASS 和 FAILD 文件作为输出。 2 读取文件头写入输出文件。 3 依据段的起始和倒数第二行中的特征字符串读取并缓存一个数据段。采用 Line Input 方式逐句读取。 在读取到倒数第二段时,判断段属性,然后继续读完完整的段。 4 根据段属性决定写入哪一个输出文件。 5 关闭所有文件。
笨狗先飞 2017-10-26
  • 打赏
  • 举报
回复
传个样本文件上来,让大侠们展展身手,看谁的程序跑的快。
赵4老师 2017-10-25
  • 打赏
  • 举报
回复
在文件大小相同的前提下: 读刚读过的文件比头次读没读过的文件快 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快 读没有磁盘碎片的文件比读有磁盘碎片的文件快 读文件不处理比边读边处理快 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上) 读固态硬盘上的文件比读普通硬盘上的文件快 您是否希望迅速对您频繁使用的文件进行碎片整理?使用 Contig 优化单个的文件,或者创建连续的新文件。http://technet.microsoft.com/zh-cn/sysinternals/bb897428 如果楼主使用的是机械硬盘,使用contig将要处理的大文件整理成连续的扇区后,速度如果变快了,请Chen8013给我支付宝zhao4zhong1@163.com转人民币100元。
舉杯邀明月 2017-10-25
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
在文件大小相同的前提下: 读刚读过的文件比头次读没读过的文件快 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快 读没有磁盘碎片的文件比读有磁盘碎片的文件快 读文件不处理比边读边处理快 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上) 读固态硬盘上的文件比读普通硬盘上的文件快
楼主的需求,又不是只需要“读文件”! 数据分析、处理,才是重点!!!
赵4老师 2017-10-25
  • 打赏
  • 举报
回复
在文件大小相同的前提下: 读刚读过的文件比头次读没读过的文件快 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快 读没有磁盘碎片的文件比读有磁盘碎片的文件快 读文件不处理比边读边处理快 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上) 读固态硬盘上的文件比读普通硬盘上的文件快
舉杯邀明月 2017-10-25
  • 打赏
  • 举报
回复
如果要求“速度”,我认为只能是先把数据全部读入内存,然后“分析”、处理,再输出文件。 这样,要处理几百MB的文件,应该要保证大约1.5G空闲内存。 ANSI编码、纯英文文本,读到内存,占用空间至少是“翻倍”,另外还有一些额外的空间占用。500MB全放内存至少要1GB内存。 并且还有“信息管理、处理”的需要的一些数据空间(有可能要占用几十MB)。
舉杯邀明月 2017-10-25
  • 打赏
  • 举报
回复
你要“快”,不知道你想快到哪步程度。 1. 无论如何,至少要把文件读一遍,几百MB的文件,读完也得几秒钟吧。 2. 你的“需求”第4点,是指的把“原始数据”的各段P100、P101……,按新指定的“起始数字”重新编号?   还是指“输出”按指定数字重新编号?(PASS的第1段P555,第2段P556…… ;FAILED也是第1段P555,第2段P556……) 3. 给定一个“输入文件”,是输出“三个文件”(如果没有“重编号”,相当于直接把输入文件复制了一个副本)?   还是只输出两个文件?(“输入文件”只是读取数据来处理,只管按要求处理两个输出文件)?
赵4老师 2017-10-25
  • 打赏
  • 举报
回复
仅供参考:
//NAME: essaie bla bla
//DIMENSION: 8
//DATA
//1  14  15
//2  11  10
//3  6   4
//4  7   13
//5  9   21
//6  19  3
//7  1   5
//8  8   8
//EOF
//
// 文本文件中可能还含有其他内容,但是需要用到的内容即以上

//比如data.txt:
//NAME: essaie bla bla
//其它内容
//DIMENSION: 8
//其它内容
//DATA
//其它内容
//1  14  15
//其它内容
//2  11  10
//其它内容
//3  6   4
//其它内容
//4  7   13
//其它内容
//5  9   21
//其它内容
//6  19  3
//其它内容
//7  1   5
//其它内容
//8  8   8
//其它内容
//EOF

// 目标是要获取NAME后字串,DIMENSION后数值,以及DATA以下的数值
// 其中NAME就是随便个字句,DIMENSION是城市数量,DATA以下是城市编号,X坐标,Y坐标
// 所有的这些将赋值给一个事先定义好的结构
#include <stdio.h>
#include <string.h>
#define MAXCPL   80   //每行最大字符数
#define MAXCITY  100  //每组数据中DATA最多项数,DIMENSION的最大值
#define MAXNAMEL 32   //NAME最大长度
struct S {
    char NAME[MAXNAMEL+1];
    int  DIMENSION;
    struct D {
        int NO;
        int X;
        int Y;
    } DATA[MAXCITY];
} s;
FILE *f;
int st,n,i;
char ln[MAXCPL];
int main() {
    f=fopen("data.txt","r");
    if (NULL==f) {
        printf("Can not open file data.txt!\n");
        return 1;
    }
    st=0;
    n=0;
    while (1) {
        if (NULL==fgets(ln,MAXCPL,f)) break;
        if (st==0) {
            if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;
        } else if (st==1) {
            if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
        } else if (st==2) {
            if (0==strcmp(ln,"DATA\n")) st=3;
        } else if (st==3) {
            if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
                n++;
                if (n>=MAXCITY || n>=s.DIMENSION) break;
            }
        }
    }
    fclose(f);
    printf("s.NAME=[%s]\n",s.NAME);
    printf("s.DIMENSION=%d\n",s.DIMENSION);
    for (i=0;i<n;i++) {
        printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
    }
    return 0;
}
//s.NAME=[essaie bla bla]
//s.DIMENSION=8
//s.DATA[0].NO,X,Y=1,14,15
//s.DATA[1].NO,X,Y=2,11,10
//s.DATA[2].NO,X,Y=3,6,4
//s.DATA[3].NO,X,Y=4,7,13
//s.DATA[4].NO,X,Y=5,9,21
//s.DATA[5].NO,X,Y=6,19,3
//s.DATA[6].NO,X,Y=7,1,5
//s.DATA[7].NO,X,Y=8,8,8

  • 打赏
  • 举报
回复
qq2776478814 如何对TXT数据文件的深度操作

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧