请教 C++怎样遍历fread到buffer里的内容?谢谢
比如fread一个文件到buffer
然后遍历这个buffer,比如每隔100字节增加一个换行符号,然后每隔100000字节输出到新的文本文件
谢谢
[解决办法]
读到fread的buff然后加空格,写文件,循环写,达到要求,
创建写的文件再写呗!
[解决办法]
你可以认为这是我的偏见:所有说出“请替我写代码,我是初学者”的人,都应该直接转行/转专业。
[解决办法]
我只是想求一个例子,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;}
}