0
我有一個文本文件,並希望在字節範圍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;
}
這不是全部代碼。我假設有一些原型可用於'main()'後面的函數,否則這些原本都不會編譯。 – WhozCraig
在Unix上,二進制文件和文本文件之間沒有區別,您可以打開它並使其運行。如果您在其他系統上並且將文件作爲「文本」文件打開,那麼CRLF將在輸入時映射到NL並在輸出時再次映射,這意味着您不必擔心字節範圍的含義。 –
CG是否被映射到BG?或者是CG映射到B?有一個巨大的差異,因爲第一個是長度保留,但第二個不是。 –