我有一个文本文件,想在某些地方更改它,例如在字节范围 4030 到 4060 中,以这种方式:
- 如果有字符 'C' 或 'c' 后跟 'G' 或 'g' ,必须改成 'B' 字符
输入文件是一个文本文件,我想获得一个更改后的文本输出文件。文本文件中没有随机访问,因此我必须以二进制形式打开文件并进行更改,但输出文件将是二进制文件,我不知道要获得文本输出。代码如下:
int main()
{
string str, cstr;
ReadTextFile("in", 4030, 4060);
return 0;
}
string ReadTextFile(string path, int from, int to)
{
fstream fp(path.c_str(), ios::in|ios::out|ios::binary);
char *target;
string res, str;
target = new char[to - from + 1];
if (!target)
{
cout << "Cannot allocate memory." << endl;
return "";
}
fp.seekg(from);
fp.read(target, to - from);
target[to - from] = 0;
res = target;
str = changestring(res);
fp.seekg(from);
fp.write((char *)&str, to-from);
return res;
}
string changestring(string str)
{
int l = str.length();
l = l-1;
for (int i = 0; i <= l; i++)
{
if (str[i] == 'C' || str[i] == 'c')
{
int j = i+1;
if (str[j] == 'G' || str[j] == 'g')
str[i] = 'B';
}
}
return str;
}