一个比较急的问题,文件的替换问题.

duangexin521 2007-04-10 09:40:04
现在小弟主要想实现两个文本之间内容的替换:
1.txt:
01 02 03 04 05 06 07 08 09
1| , , , , 01 02 03 01 05 06 , , , , ,
2| , , , , , , ,04 02 01 06 07 , , , ,
...........
2.txt:
01 02 03 04 05 06 07 08 09
1| . . M M P F F P F F M M M . .
2| . . . . M M M F F F P F M M . .
.......
简单点的说法对1.txt进行操作就是从界面上任意输入比如01什么的,如果找到01就用P来替换,其他的比如02 03就用F来替换但是1| , , ,这一些不能变.
PS:对1.txt进行了替换操作之后,比如我输入03即1.txt变成了
01 02 03 04 05 06 07 08 09
1| , , , , F F P F F F , , , , ,
2| , , , , , , , F F F F F , , , ,
...........
完成了这步,我根据替换后的1.txt再来将
1| , , , , F F P F F F , , , , ,
2| , , , , , , , F F F F F , , , ,
中的F,P想对应的替换2.txt的F,P,即变化之后的2.txt应该为:
01 02 03 04 05 06 07 08 09
1| . . M M F F P F F F M M M . .
2| . . . . M M M F F F F F M M . .
这就是我所需要的结果,但不知道大家是否明白.知道的请大家指点指点.谢谢了。
...全文
194 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
duangexin521 2007-04-11
  • 打赏
  • 举报
回复
结帖,自己已经搞定~~~
duangexin521 2007-04-11
  • 打赏
  • 举报
回复
?????????????
duangexin521 2007-04-10
  • 打赏
  • 举报
回复
除了正则难道就没有其他的方法了吗?如果按照我这个思路,怎么来进行呢??
jixingzhong 2007-04-10
  • 打赏
  • 举报
回复
恩, 同意用 正则 ~
jixingzhong 2007-04-10
  • 打赏
  • 举报
回复
由于字符数不变,
所以可以使用定位覆盖的方式 ~~

不过定位可能比较麻烦 ~
taodm 2007-04-10
  • 打赏
  • 举报
回复
呃,学正则吧。正则就干这事的。
duangexin521 2007-04-10
  • 打赏
  • 举报
回复
目前我的初步程序只提取了对1.txt中间那部分提取出来了。
CString sFileFilter = "All Files (*.*)|";
CString sFileName;
UCHAR* szBuf;
CHAR szBuffer;
UCHAR Buffer;
int iCount,iMoveCount,i,j,iCountNum;
CString strInputValue = "";
CHAR *token;
CString CompareValue = " P";
CString RelativeValue = " F";

CFileDialog fDlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,sFileFilter,NULL);
fDlg.DoModal();
sFileName = fDlg.GetFileName();

CStdioFile file(sFileName,CFile::modeRead);

int fileSize = file.GetLength();
szBuf = new UCHAR[fileSize];
memset(szBuf,0,fileSize);

iCount = 0;
iMoveCount = 0;
iCountNum = 0;
for (i =0;i<fileSize;i++)
{
file.Read(&szBuffer,1);
if(szBuffer == '\n')
{
iMoveCount ++;
iCount = i;//记下第3行的地址
}
if (iMoveCount == 2)
break;
} //这部分主要是去掉前面2行,因为我的文件前面有2行标记,这里的txt中只有1行.

for(j=iCount;j<fileSize;j++)
{
file.Read(&szBuffer,1);
*szBuf = szBuffer;
szBuf ++;
if(szBuffer =='=')
{
iCountNum = j;
break;
}
}
这个是我目前所完成的提取中间那一部分的数据,因为每个txt文件都很有规律,第1。2行只是一些标识,所以我先把它去掉,另外每一个txt文件都有=======================这个信息做结束的,所以我根据读文件,读到=号,我就停止读,同时再这个读的过程中,我将这中间一段保存在szBuf这个指针中了。
现在目前我最纳闷的就是怎么来解决szBuf这指针中数字的有效处理,即介面输入00,替换成空格P,两个字符嘛。 其它的数字就转换成空格F, 请问接下来怎么解决呢???

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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