如何在文件中查找某一字符串的个数

halleyw 2005-06-15 11:47:59
有一个文件里面有中文有英文
我想在此文件中查找某一个字符串的个数

CFile file(TRUE, "test.txt");

然后该怎么做~~~~???
...全文
1141 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
halleyw 2005-06-17
  • 打赏
  • 举报
回复
谢谢各位。
我就是每次读1K到CString里。
然后在这个刚读入的CString里Find。
可是得出来的结果跟实际结果不一样。因为有的字符串正好处于1K的边缘。

junhuang09() 给的最正确。
huang1998 2005-06-16
  • 打赏
  • 举报
回复
文件大就一段一段的读啊,一次1K不足就一次读完,上面的代码就可以实现
gooyan 2005-06-16
  • 打赏
  • 举报
回复
直接读取文件内容去查找有漏洞,而且如果把所有文件内容读取,会比较耗资源阿,万一文件很大很大呢
gooyan 2005-06-16
  • 打赏
  • 举报
回复
作文件影射,然后用字符串的查找匹配函数
如果单纯只是txt查找,那么可以用系统的findstr命令,然后用管道获得输出
junhuang09 2005-06-16
  • 打赏
  • 举报
回复

int findstrcount(CString, filename, CString findstr)
{
CString strfile;

CFile fp;
CFileException fe;

// 打开文件
if (!fp.Open(filename, CFile::modeRead, &fe))
{
AfxMessageBox("打开文件失败!");
return FALSE;
}

// 将文件读入到strfile
long dwLength = 0;
dwLength = fp.GetLength();

TCHAR *pBuf = new TCHAR[dwLength];
memset(pBuf, 0, sizeof(TCHAR) * dwLength);
UINT nBytesRead = fp.Read(pBuf, dwLength);
strfile = pBuf;
fp.Close();
delete [] pBuf;

strfile = strfile.Left(dwLength);

// 查找字符串 findstr
int pos = 0,
int pos1;
int count = 0;
while ((pos1=strfile.Find(findstr, pos)) != -1)
{
// 找到一个, 计数加1
count++;
pos = pos1 + findstr.GetLength();
}

return count;
}
cieon_123 2005-06-16
  • 打赏
  • 举报
回复
把文件读给一个CString,然后用CString的find很容易啊。
CString fileStr,findStr;
.....//读文件到fileStr,给findStr赋值
int i=0,count=0;
while(( i=fileStr.Find(findStr,i)) > 0)
count++;
但是有个问题,如果你要找的那个字符串正好处在2行的话,比如:
文件:
dfsfus9fj342ab
cjisjfisabc
要找的字符串:abc
这时候查找结果是1,因为有一个abc在第一行尾和第二行初,中间实际有一个回车,所以查不到。如果你只处理字符串的话,就先删除点fileStr里面的所有回车,然后再找
fireseed 2005-06-16
  • 打赏
  • 举报
回复
把文件映射一下,当成内存用

CreateFileMapping(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName
);

LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap
);


halleyw 2005-06-16
  • 打赏
  • 举报
回复
难道没有人知道吗???
halleyw 2005-06-15
  • 打赏
  • 举报
回复
to: biliangxia(天下无双)

如果文件比较大,你每次只能从256个字符中查找。如果这个256个字符的最后几个字符正好是我要查找的字符的前几位。这样,查询出来的结果就会少于实际结果。

xqk 2005-06-15
  • 打赏
  • 举报
回复
用CString 的 .Find 做个标志 位
biliangxia 2005-06-15
  • 打赏
  • 举报
回复
假设需要查找的字符串为 szNeedFind
int nlen = strlen(szNeedFind);
FILE* fp = fopen("test.txt", "r");
char szBuffer[256]; char ch; int iCount = 0;
strcpy(szBuffer, "");
while(!feof(fp))
{
if( fread(fp, 1, 1, &ch) != 1) break;
else
{
memmove(szBuffer, szBuffer+1, nlen-1);
strcat(szBuffer, &ch);
if( strcmp(szBuffer, szNeedFind) == 0 )
iCount ++;
}
}
fclose(fp);

qrlvls 2005-06-15
  • 打赏
  • 举报
回复
顺序读取就好,最好做一个环形队列

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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