首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎样从缓冲区中获得字符串?(兄弟小弟我忙活了一阵子,但是还是搞不定,可能很简单,但是请高手不要笑话)

2012-01-11 
怎样从缓冲区中获得字符串?(兄弟我忙活了一阵子,但是还是搞不定,可能很简单,但是请高手不要笑话)以知filer

怎样从缓冲区中获得字符串?(兄弟我忙活了一阵子,但是还是搞不定,可能很简单,但是请高手不要笑话)
以知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什么的,用来保存读取出的每一行.
这样你想操作哪行就直接数组索引就搞定了.

热点排行