怎样从缓冲区中获得字符串?(兄弟我忙活了一阵子,但是还是搞不定,可能很简单,但是请高手不要笑话)
以知filer.txt内容如下(各行的后半部分长度不定):
line1 tester1 000A 20071001224510 20071002083122 20060322 中国.台湾省--- | 阿扁.
...................N行................................... //其他内容 _ _
line1 tester6 000F 20071001224510 20071002083122 20060322 哈哈 旧金山.美国
现在要将filer.txt中的部分内容转移到filew.txt中,怎样实现?
filew.txt内容如下:
line1 tester1 20071001224510 20071002083122 20060322
..................N行................................
line1 tester6 20071001224510 20071002083122 20060322
void CFilerwDlg::OnOK() //按扭的响应部分
{
char* pFileNamer="readfrom.txt";//读文件名称
char* pFileNamew="writeto.txt"; //写文件名称
char linestr[300]; //行字符串缓冲区
char line[5]; //string 1
char tester[7]; //string 2
char begintime[14];//string 3
char endtime[14]; //string 4
char operatorID[8];//string 5
TRY
{//先打开各个文件
CStdioFile filer(pFileNamer, CFile::modeRead);
CStdioFile filew(pFileNamew, CFile::modeCreate|CFile::modeWrite);
CStdioFile file3(pFileName3, CFile::modeCreate|CFile::modeWrite);
for(int i=0; i<=7; i++)//读写7行
{
filer.ReadString(linestr, 299);//按行读,有回车符则换行
//###################################################################处理部分
//1,怎样将字符串缓冲区的linestr取出line[5]的内容? 即line1
//2,怎样将字符串缓冲区的linestr取出tester[7]的内容? 即tester1
//...... 即begintime, endtime, operatorID
//3,怎样实现linestr=line+tester+/...字符串连接?
//我用这个代码只能实现按行逐步copy,但是不 能 实 现 提 取 想 要 的字符串,进而将字符串连接,写入等操作
//有请高手将实现代码写在2行#之间,依供兄弟揣磨
//###################################################################
filew.WriteString(linestr); //写串
//最后关闭各个文件
filer.Close();
filew.Close();
}
CATCH(CFileException,e)
{
#ifdef _DEBUG
afxDump<<"File could not be opened"<<e->m_cause<<"\n";
#endif
}
END_CATCH
CDialog::OnOK();
}
[解决办法]
以知filer.txt内容如下(各行的后半部分长度不定):
line1 tester1 000A 20071001224510 20071002083122 20060322 中国.台湾省--- ¦ 阿扁.
...................N行................................... //其他内容 _ _
line1 tester6 000F 20071001224510 20071002083122 20060322 哈哈 旧金山.美国
现在要将filer.txt中的部分内容转移到filew.txt中,怎样实现?
filew.txt内容如下:
line1 tester1 20071001224510 20071002083122 20060322
..................N行................................
line1 tester6 20071001224510 20071002083122 20060322
========================================
你是不是把它给截断再存到filew.txt中?
[解决办法]
我知道你用的开发环境,我想应该是6.0吧,不然2005下会提示有好多错误(无关紧要的,很好改的_T问题)
这个程序有一个致命的错误
如下:
CStdioFile filer(pFileNamer, CFile::modeRead);
CStdioFile filew(pFileNamew, CFile::modeCreate ¦CFile::modeWrite);
CStdioFile file3(pFileName3, CFile::modeCreate ¦CFile::modeWrite);
for(int i=0; i <=7; i++)//读写7行
{
filer.ReadString(linestr, 299);//按行读,有回车符则换行
//###################################################################处理部分
//1,怎样将字符串缓冲区的linestr取出line[5]的内容? 即line1
//2,怎样将字符串缓冲区的linestr取出tester[7]的内容? 即tester1
//...... 即begintime, endtime, operatorID
//3,怎样实现linestr=line+tester+/...字符串连接?
//我用这个代码只能实现按行逐步copy,但是不 能 实 现 提 取 想 要 的字符串,进而将字符串连接,写入等操作
//有请高手将实现代码写在2行#之间,依供兄弟揣磨
//###################################################################
filew.WriteString(linestr); //写串
//最后关闭各个文件
filer.Close();
filew.Close();
}
在一个FOR 循环中多次关闭文件,其实文件只能被关一次.所以应该把
filer.Close();
filew.Close();
放在}外面,我指的是FOR 外.
[解决办法]
查 CString::Left CString::Right CString::Mid 的用法即可解决问题
[解决办法]
有一例可以看一下:
CString buffer;
CStdioFile file
file.Open("c:\readme.txt",CFile::modeRead);
CString strBuf;
CString str;
while(file.ReadString(str))
{
strBuf += str;
}
file.Close();
[解决办法]
//自动换行简单.
如
CString cs="\n\r";
filew.Write(cs,cs.GetLength());
[解决办法]
你可以定义一个CString数组或者CStringArray什么的,用来保存读取出的每一行.
这样你想操作哪行就直接数组索引就搞定了.