声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5426|回复: 6

[C/C++] 判断文本文件的行数

[复制链接]
发表于 2010-4-24 19:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
C语言中怎么统计一个文本文件的行数啊?一定要剔除空行。而且文本文件保存的是矩阵。
有没有大虾可以帮忙啊?谢谢!
回复
分享到:

使用道具 举报

发表于 2010-5-22 16:43 | 显示全部楼层
WHILE(X=!NULL),.......................................
发表于 2010-10-1 12:41 | 显示全部楼层
本帖最后由 wqsong 于 2010-10-25 13:15 编辑

  1. #include "stdafx.h"
  2. #include <fstream>
  3. #include <iostream>
  4. using namespace std;

  5. #define BUFFERSIZE 255
  6. int _tmain(int argc, _TCHAR* argv[])
  7. {
  8.         ifstream fDataFile;
  9.         char pFileBuff[BUFFERSIZE];
  10.         size_t nCount = 0;
  11.         fDataFile.open("file.txt",ios::in);
  12.         while (!fDataFile.eof())
  13.         {
  14.                 fDataFile.getline(pFileBuff,BUFFERSIZE);
  15.                 size_t nCurrSizeOfLine = strlen(pFileBuff);
  16.                 for (size_t j=0;j < nCurrSizeOfLine;++j)
  17.                 {
  18.                         if (pFileBuff[0]==' ')
  19.                         {
  20.                                 continue;
  21.                         }
  22.                         else
  23.                         {
  24.                                 //遇到第一个非空格字符,认为是有意义的行
  25.                                 //如果本行确实是有意义的行,则该循环不会进行太多次
  26.                                 nCount++;
  27.                                 break;

  28.                         }
  29.                 }
  30.         }
  31.         fDataFile.close();
  32.         cout<<"Count of effective lines"<<nCount<<endl;
  33.         system("pause");
  34.         return 1;
  35. }
复制代码

评分

1

查看全部评分

发表于 2010-10-25 13:13 | 显示全部楼层
本帖最后由 wqsong 于 2010-10-25 14:29 编辑

思路:
1、以行读取文件。
2、去掉行首行尾不可打印字符,如space,\v,\t等。
3、判断是否为空行。是统计数不变,不是统计数加1。
下面是C++写的一个字符串处理相关函数库(部分,全部见附件):
  1. //去除行首不可打印符
  2. void trim_left_space(std::string &str)
  3. {
  4.         if(str.length() == 0)
  5.                 return;
  6.         size_t beg = str.find_first_not_of(" \a\b\f\n\r\t\v");
  7.         if(beg == std::string::npos)
  8.         {
  9.                 str = "";
  10.                 return;
  11.         }
  12.         else
  13.                 str.erase(0, beg);
  14. }

  15. //去除行尾不可打印符
  16. void trim_right_space(std::string &str)
  17. {
  18.         if(str.length() == 0)
  19.                 return;
  20.         size_t end = str.find_last_not_of(" \a\b\f\n\r\t\v");
  21.         if(end == std::string::npos)
  22.         {
  23.                 str = "";
  24.                 return;
  25.         }
  26.         else
  27.                 str.erase(end + 1, str.length() - end - 1);
  28. }

  29. //去掉行首行尾不可打印字符
  30. void trim(std::string &str)
  31. {
  32.         if(str.length() == 0)
  33.                 return;
  34.         size_t beg = str.find_first_not_of(" \a\b\f\n\r\t\v");
  35.         if(beg == std::string::npos)
  36.         {
  37.                 str = "";
  38.                 return;
  39.         }
  40.         else
  41.                 str.erase(0, beg);
  42.         size_t end = str.find_last_not_of(" \a\b\f\n\r\t\v");
  43.         str.erase(end + 1, str.length() - end - 1);
  44. }
复制代码
声明和实现没有分开,使用时候可以把声明和实现分开,已达到最小编译目的。

onlyfun_string.txt

2.22 KB, 下载次数: 6

点评

。。。没了。。。  发表于 2010-10-27 12:03
还有售价……家贫,买不起。。。  发表于 2010-10-25 13:54
发表于 2010-10-25 13:18 | 显示全部楼层
本帖最后由 wqsong 于 2010-10-25 13:19 编辑

文本处理不是C/C++强项,没有太多相关类库支持,可以平时写一些自己的库。如非必须不建议用C/C++。
相反,Perl、Python处理文本是强项,有丰富的类库支持。
看Python代码:
  1. # --coding:GB2312--
  2. cnt = 0 #统计数初始化
  3. fp = open('data.txt') #打开要查询的文件
  4. for line in fp: #从fp中读取行,利用这种方法可以避免有空行截断读取
  5.         line = line.strip()#去掉前后导空白
  6.         if('' == line):
  7.                 continue #去掉前后导空白如果是空行不作处理
  8.         cnt += 1
  9.         # 其他操作
  10. fp.close() #读完文件,关闭文件
  11. print cnt
复制代码

评分

1

查看全部评分

发表于 2010-10-25 13:20 | 显示全部楼层
点编辑点错了,不小心编辑了Rainyboy的帖子,sorry。。。

点评

呵呵,没事,新官上任三把火嘛,不小心烧到点小花小草没关系。  发表于 2010-10-25 13:55
发表于 2010-10-25 15:07 | 显示全部楼层
其实判断文件行数啊,合并文件啊之类的属于那种平时不是很在意,但是要用的时候又不是很想的起来的部分……呵呵,楼主可以整理一个诸如“计算文件行数的18种方法”之类的存着,要用的时候打开看一看。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 12:00 , Processed in 0.068812 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表