怎样从文本文件中读取字符串?
问题点数:33、回复次数:14Top
1 楼iProgram(na)回复于 2001-05-18 19:59:00 得分 2
CStdioFile f;
f.Open(filename,CFile:modeRead);
f.ReadLine(szLine,sizeof(szLine);
Top
2 楼q12345(123)回复于 2001-05-18 20:11:00 得分 0
怎样从文本文件中搜索指定字符?Top
3 楼seesi(不是我想骗你,是我不知道怎么才能不骗!)回复于 2001-05-18 20:21:00 得分 1
全读进来,然后CString的FindTop
4 楼Semigod()回复于 2001-05-18 20:24:00 得分 1
建议先把文本文件读入缓冲区,然后用汇编语言进行指定字符的搜索。下面是我的某程序中的一段代码,希望这断代码能帮你。
__asm
{
push esi
push edi
mov al, cCharacterToScan // al中放你想要搜索的字符
mov edi, pcTempString // edi 中放指向文本内容的缓冲区的地址
mov ecx, uiTempNumOfChar // ecx 为文本长度
cld // 正向扫描
repnz scasb // Look for this character in character list
mov iSign, 0
setz byte ptr iSign // 如果找到则 iSign 为1,否则为0
pop edi
pop esi
}Top
5 楼prefix(MtSC)回复于 2001-05-18 20:31:00 得分 2
CStdioFile m_cSourceFile;
int CImportParam::ReadFile()
{
CString sReadLine;
int iLineNumber=1;
CFileException* pError=NULL;
if (m_cSourceFile.Open(m_sImportFileName,CFile::modeRead,pError) == 0)
{
return -1;
}
m_cSourceFile.SeekToBegin();
while (m_cSourceFile.ReadString(sReadLine) == 1)
{
... Do something with the retrived line (sReadLine) ....
iLineNumber++;
}
m_cSourceFile.Close();
return 2;
}
Hope this helps... Top
6 楼Semigod()回复于 2001-05-18 20:32:00 得分 0
刚忘了说,找到后 则该字符在文本文件中的偏移值为 ecx -1Top
7 楼q12345(123)回复于 2001-05-18 20:51:00 得分 0
多谢大家的关注!
还能再具体说一说怎样从文本文件中读取一行字符串,并负值到变量中吗?Top
8 楼Semigod()回复于 2001-05-18 22:17:00 得分 1
下面是我程序中的片断,参考一下吧 :-) 别忘了自己该改的改哟
CFile * pDictfile;
try
{
pDictfile = new CFile();
}
catch(CMemoryException *pMemErr)
{
pMemErr->ReportError();
pMemErr->Delete();
return;
}
propSheet.m_Page1.m_Dictfile.TrimLeft();
while (pDictfile->Open(propSheet.m_Page1.m_Dictfile, OF_READ, NULL) == FALSE)
{
if (AfxMessageBox(IDS_MSG_INVALIDDICT,MB_RETRYCANCEL)==IDCANCEL)
{
delete pDictfile;
return;
}
}
DWORD dwDictLength=pDictfile->GetLength();
if (!m_pDictbuffer)
{
try
{
m_pDictbuffer = new char[dwDictLength+100];
}
catch(CMemoryException *pMemErr)
{
pMemErr->ReportError();
pMemErr->Delete();
pDictfile->Close();
delete pDictfile;
m_pDictbuffer = 0;
return;
}
}
while (! pDictfile->Read(m_pDictbuffer, dwDictLength))
{
if (AfxMessageBox(_T("Can not read dictionary file."), MB_RETRYCANCEL)==IDCANCEL)
{
pDictfile->Close();
delete pDictfile;
delete m_pDictbuffer;
m_pDictbuffer = 0;
return;
}
}
pDictfile->Close();
Top
9 楼yuezw()羊拉多纳()回复于 2001-05-18 22:24:00 得分 3
CFile file("C:\HELLO.TXT",CFile::modeRead);///只读方式打开
///CFile::modeRead可改为 CFile::modeWrite(只写),CFile::modeReadWrite(读写),CFile::modeCreate(新建)
例子:
{
CFile file;
file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);
.
.
.
}
//移动文件指针
file.Seek(100,CFile::begin);///从文件头开始往下移动100字节
file.Seek(-50,CFile::end);///从文件末尾往上移动50字节
file.Seek(-30,CFile::current);///从当前位置往上移动30字节
file.SeekToBegin();///移到文件头
file.SeekToEnd();///移到文件尾
//读文件:
char buffer[1000];
file.Read(buffer,1000);
//写文件:
CString string("自强不息");
file.Write(string,8);
//关闭文件
file.Close();
够详细了吧,记着给分Top
10 楼q12345(123)回复于 2001-05-18 23:21:00 得分 0
主要参考上面一段介绍(比较好看懂),编译时无错,但一运行就有错,弹出一个对话框,要我终止或忽略。另外,怎样把文件中的字符串读到一个CString 的变量里。Top
11 楼q12345(123)回复于 2001-05-19 11:24:00 得分 0
请赐教
Top
12 楼xianglusong(向陆松)回复于 2001-05-19 12:14:00 得分 15
CStdioFile fp;
fp.Open(filanema,CFile::modeRead,NULL);
CString s,str;
s="";
while(!feof(fp.m_pStream))
{
fp.ReadString(str);
s+=str;
s+=13;
s+=10;
}
fp.Close();
m_Edit1.SetWindowText(s);Top
13 楼q12345(123)回复于 2001-05-19 13:59:00 得分 0
参考上面的程序,编译时无错,运行时还是有错,说程序执行了非法操作,
我的程序是在 void CMy123Dlg::OnButton1() 中添加的,如下:
CStdioFile fp;
fp.Open("c:\1.txt",CFile::modeRead,NULL);
CString s,str;
s="";
while(!feof(fp.m_pStream)) //这行是什么意思?
{
fp.ReadString(str);
s+=str;
s+=13; //
s+=10; //这两行是什么意思?
}
fp.Close();
m_Edit1=s;
UpdateData(false);Top
14 楼xianglusong(向陆松)回复于 2001-05-19 14:18:00 得分 8
在fp.Open("c:\1.txt"...)有错。
应是fp.Open("c:\\1.txt"...);
//这行是判断文件是否结束。
//
//这两行加上回车符。软回车与硬回车啊。
Top




