RT
文本是用CFile创建的
怎样快速得到文本文件的总行数
多谢高手说的详细点我自己有个想法是:
先把文本文件整个写到cstring中,然后数有几个_T(“\r\n”)来得到,但是又怎样快速得到_T(“\r\n”)的个数呢?注意:
不能用CStdioFile 的函数 多谢各位了
文本是用CFile创建的
怎样快速得到文本文件的总行数
多谢高手说的详细点我自己有个想法是:
先把文本文件整个写到cstring中,然后数有几个_T(“\r\n”)来得到,但是又怎样快速得到_T(“\r\n”)的个数呢?注意:
不能用CStdioFile 的函数 多谢各位了
解决方案 »
- C++编写的程序,往SQLSERVER2005中插入数据报错?
- 聊天室客户端,创建监听套接字失败,求解决,高手勿笑
- VC用ADO 创建一个数字类型(double)的字段 请问怎么写_ConnectionPtr中Excute的代码?
- 如何在对话框中收集空间的消息?
- ppage1 = new CListConrol(); 和ppage1= new CListConrol; 有什么区别
- 使用CListCtrl时的诡异问题!!!
- 关于计算点击次数的鼠标钩子!!!
- dll的问题
- 我只想干VC++/SDK,不知关于找事方面有没有什么不妥?
- 为什么调用这个OnInit函数连接不了数据库?
- 求可以缩放JPG文件的类
- 聊天软件图文混合问题
CString str;
int i=0,j=0;
i = str.Find("\r\n",0);
j++;
while(i != -1)
{
i = str.Find("\r\n",i+2);
j++;
}最后j就是行数。
单独只获取行数是可以这么搞的,如果是想获取每一行的话,如下:#define MAX_BUF 64*1024
void CTestDlg::AnalysisFile()
{
char buf[MAX_BUF];
ULONGLONG ullPos;
ULONGLONG ullFileLen;
int nBufPos;
int nRead; memset(buf, 0, sizeof(buf));
ullPos = 0;
nBufPos = 0; CFile file;
file.Open("c:\\001.txt", CFile::modeRead);
ullFileLen = file.GetLength(); while((ullPos = file.GetPosition()) < ullFileLen)
{
nRead = file.Read(buf, MAX_BUF); //读取的字节大小,一般情况下应该是MAX_BUF,文件结尾就不足MAX_BUF
while(nRead > 0)
{
nBufPos = AnalysisBuffer(buf, nRead);
if(MAX_BUF - nBufPos > 0)
{
file.Seek(nBufPos - MAX_BUF, CFile::current);//看看到底是移动多少,细节
}
} nBufPos = 0;
}
}int CTestDlg::AnalysisBuffer(char*buffer, UINT nReadSize)
{
int nSubCount = 0;
CString rString;
CString rSubString;//用来接受子字符串,就是读取的一行
rString = buffer;
while(AfxExtractSubString(rSubString,rString.GetBuffer(0), nSubCount++,'\r\n'))
{
//....
//rSubString就是循环读出每一行的;
} return rString.ReverseFind('\r\n');
}
粗略代码,细节需要调试
int i=0,j=0;
i = str.Find("\r\n",0);
j++;
while(i != -1)
{
i = str.Find("\r\n",i+2);
j++;
}
慢慢数啊
if (!fin.is_open())
{
ASSERT(FALSE);
}
std::string str;
std::vector<std::string>arrLineContent;while (getline(fin, str))
{
arrLineContent.push_back(str);
}int nLineCount = arrLineContent.size();
一个函数解决问题。//函数入口参数是需要计数的文本文件名
int CountLine(char * szFile)
{
int iRet;
HFILE hFile;
char cc;
char cc0;//保存上一次读取的字节iRet = 0;
hFile = _lopen(szFile,OF_READWRITE);
if(hFile == HFILE_ERROR)
return iRet;
cc0 = 0;
while(_lread(hFile,&cc,1) == 1)
{
if(cc==0x0a)
iRet++;
cc0 = cc;
}
_lclose(hFile);if((cc0!=0) && (cc0!=0x0a))
iRet++;return iRet;
}
2、数 \n