判断文本文件的行数
C语言中怎么统计一个文本文件的行数啊?一定要剔除空行。而且文本文件保存的是矩阵。有没有大虾可以帮忙啊?谢谢! WHILE(X=!NULL),....................................... 本帖最后由 wqsong 于 2010-10-25 13:15 编辑
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
#define BUFFERSIZE 255
int _tmain(int argc, _TCHAR* argv[])
{
ifstream fDataFile;
char pFileBuff;
size_t nCount = 0;
fDataFile.open("file.txt",ios::in);
while (!fDataFile.eof())
{
fDataFile.getline(pFileBuff,BUFFERSIZE);
size_t nCurrSizeOfLine = strlen(pFileBuff);
for (size_t j=0;j < nCurrSizeOfLine;++j)
{
if (pFileBuff==' ')
{
continue;
}
else
{
//遇到第一个非空格字符,认为是有意义的行
//如果本行确实是有意义的行,则该循环不会进行太多次
nCount++;
break;
}
}
}
fDataFile.close();
cout<<"Count of effective lines"<<nCount<<endl;
system("pause");
return 1;
} 本帖最后由 wqsong 于 2010-10-25 14:29 编辑
思路:
1、以行读取文件。
2、去掉行首行尾不可打印字符,如space,\v,\t等。
3、判断是否为空行。是统计数不变,不是统计数加1。
下面是C++写的一个字符串处理相关函数库(部分,全部见附件): //去除行首不可打印符
void trim_left_space(std::string &str)
{
if(str.length() == 0)
return;
size_t beg = str.find_first_not_of(" \a\b\f\n\r\t\v");
if(beg == std::string::npos)
{
str = "";
return;
}
else
str.erase(0, beg);
}
//去除行尾不可打印符
void trim_right_space(std::string &str)
{
if(str.length() == 0)
return;
size_t end = str.find_last_not_of(" \a\b\f\n\r\t\v");
if(end == std::string::npos)
{
str = "";
return;
}
else
str.erase(end + 1, str.length() - end - 1);
}
//去掉行首行尾不可打印字符
void trim(std::string &str)
{
if(str.length() == 0)
return;
size_t beg = str.find_first_not_of(" \a\b\f\n\r\t\v");
if(beg == std::string::npos)
{
str = "";
return;
}
else
str.erase(0, beg);
size_t end = str.find_last_not_of(" \a\b\f\n\r\t\v");
str.erase(end + 1, str.length() - end - 1);
}声明和实现没有分开,使用时候可以把声明和实现分开,已达到最小编译目的。 本帖最后由 wqsong 于 2010-10-25 13:19 编辑
文本处理不是C/C++强项,没有太多相关类库支持,可以平时写一些自己的库。如非必须不建议用C/C++。
相反,Perl、Python处理文本是强项,有丰富的类库支持。
看Python代码:# --coding:GB2312--
cnt = 0 #统计数初始化
fp = open('data.txt') #打开要查询的文件
for line in fp: #从fp中读取行,利用这种方法可以避免有空行截断读取
line = line.strip()#去掉前后导空白
if('' == line):
continue #去掉前后导空白如果是空行不作处理
cnt += 1
# 其他操作
fp.close() #读完文件,关闭文件
print cnt 点编辑点错了,不小心编辑了Rainyboy的帖子,sorry。。。 其实判断文件行数啊,合并文件啊之类的属于那种平时不是很在意,但是要用的时候又不是很想的起来的部分……呵呵,楼主可以整理一个诸如“计算文件行数的18种方法”之类的存着,要用的时候打开看一看。
页:
[1]