首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问 C++怎样遍历fread到buffer里的内容?多谢

2013-10-16 
请教 C++怎样遍历fread到buffer里的内容?谢谢比如fread一个文件到buffer然后遍历这个buffer,比如每隔100字

请教 C++怎样遍历fread到buffer里的内容?谢谢
比如fread一个文件到buffer
然后遍历这个buffer,比如每隔100字节增加一个换行符号,然后每隔100000字节输出到新的文本文件
谢谢
[解决办法]
读到fread的buff然后加空格,写文件,循环写,达到要求,
创建写的文件再写呗!
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

读到fread的buff然后加空格,写文件,循环写,达到要求,
创建写的文件再写呗!

谢谢,怎么加空格?
比如一个DBF文件,10M,我一次性fread读到buf
这个buf的内容本身就含有空格
我希望的是编译这个buf一次,比如每移动100个字节,加一个空格,共11个字节,然后保存到新的内存变量
当攒够1000个这样的11字节时候,就把内存变量的内容写到文本文件,然后清空内存变量
然后继续从当前位置读buf。。
怎么实现呢?

读入10M的内存,申请一个11M的内存,每复制10字节就多写1字节,然后把11M的内存写入文件

谢谢,代码怎么实现呢?我是C++初学者

你可以认为这是我的偏见:所有说出“请替我写代码,我是初学者”的人,都应该直接转行/转专业。
[解决办法]
引用:
我只是想求一个例子,fread到buf后,怎样读取、遍历buf的内容
并不是要求写完整的例子。实在过意不去。


随手写了个,可能跟你的需求不太一样,也可能有bug,没有测试过,你自己改改吧
#include <fstream>
#include <iostream>

template <size_t buffer_size = 100000>
void f(const char* in_path, const char* out_path, const size_t line_size, const char delimiter) {
  char buffer[buffer_size];
  size_t capacity = buffer_size;
  std::ifstream is(in_path, std::ios::in);
  std::ofstream os(out_path, std::ios::out);

  char* iter = buffer;
  while(is) {
    if (capacity < line_size + sizeof(delimiter)) {
      os.write(buffer, buffer_size - capacity);
      capacity = buffer_size;
    }   

    is.read(iter, line_size);
    iter += line_size;
    *iter++ = delimiter;
    capacity -= line_size + sizeof(delimiter);
  }
}

int main(int argc, char* argv[]) {
  f("in.txt", "out.txt", 100, '\n');
}

[解决办法]
仅供参考
#include <stdio.h>
#include <string.h>
#include <locale.h>
char s[256];
char *p;
int r,n,i;
int main() {
    setlocale(LC_ALL,"chs");
    while (1) {
        printf("请输入一行文字(空行结束),"%%20"将替换为" ","你懂得"将替换为"XXXXXX":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);
                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//



------解决方案--------------------


假设字符串如下
char s[]="12345678901234567890";
char t[2000*6];
char *p,*q;
int n;
p=s;q=t;n=0;
//从字符串的开头开始读,以10个字节为单位(表示DBF的一条记录)
while (1) {
    //第一次读3个字节,读入"123"
    memcpy(q,p,3);q+=3;
    //第二次从6开始读,读入2个字节,读入"67",后面的"789"不要了
    p+=5;memcpy(q,p,2);q+=2;p+=5;
    // 然后在"67"的后面加一个换行符。这样就是我要的一条记录
    q[0]='\n';q++;
    // 然后再读入"890"后面的"123",重复上面的过程

    // 攒够2000行后,写文本文件一次
    n++;
    if (n>=2000) {writefile();q=t;}

}

热点排行