ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

wc.exe

2020-03-22 20:55:18  阅读:262  来源: 互联网

标签:comment 字符 exe wc name read file line


github地址:https://github.com/impossible233/test/blob/master/wc.exe

一.项目要求

1.wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数

2.实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。程序处理用户需求的模式为:wc.exe [parameter] [file_name]

3.基本要求:

    wc.exe -c file.c     //返回文件 file.c 的字符数

    wc.exe -w file.c    //返回文件 file.c 的词的数目

    wc.exe -l file.c      //返回文件 file.c 的行数

4.扩展功能:

    -s   递归处理目录下符合条件的文件

    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。

5.高级功能:

   -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

二.PSP表格

PSP2.1 Personal Software Process Stages 预估时间(分钟) 实际耗时(分钟)
Planning 计划 10 15
-Estimate -估计这个任务需要多少时间 500 900
Development 开发 300 350
-Analysis -需求分析(包括学习新技术) 20 40

-Design Spec

-生成设计文档 30 15
-Design Review -设计复审(和同事审核设计文档) 20 15
-Coding Standard -代码规范(为目前得开发制定合适得规范) 10 10
-Design -具体设计 40 80
-Coding -具体编码 150 250
-Code Review -代码复审 30 15
-Test -测试(自我测试,修改代码,提交修改) 20 45
Reporting 报告 45 60
-Test Report -测试报告 20 30
-Size Measurement -计算工作量 10 10
-Postmortem & Process Improvement Plan -事后总结,并提出过程改进计划 10 10
合计   715 945

三.解题思路

    1.基本要求:

  • 统计字符数:读取文件内容,用len函数逐步统计各行的字符数,再进行相加
  • 统计单词数:读取文件内容,通过检索含有a到z与A到Z之间的字符数,再逐步相加,即为单词数。
  • 统计行数:读取文件,用line与len函数进行行数运算。  

   2.进阶功能

  1. 空行数:检索全部行,去除每行左右空格后,若该行字符数小于等于1,即为空号,逐步累加求空行数。
  2. 标识行:先检索含有#的行数进行累加,再选取两侧不含“”或’‘的行数与其进行运算,求出标识行。
  3. 代码行:求出总行数后,减去空行与标识行,即为所求代码行。

 

 四.设计实现过程

    1.主要类:

  • main:项目的主函数
  • openfile:打开文件
  • readFile:读取文件
  • len:计数函数
  • splitt:仅读取所需字符,删除无关字符,便于查找。
  • startswith:检索所需字符

    五.代码说明

    1.返回字符数目

  • def char(file_name):
        f = open(file_name, 'r') 
        return len(f.read())        #字符数

    2.返回行数

  • def toline(file_name):
        f = open(file_name,"r")
        read=f.readlines()
        return len(read)            #行数

    3.返回单词数

  • def words(file_name):
        f = open(file_name,'r')
        read=re.split(r'[a-zA-Z]+',f.read())
        return len(read)            #词数

    4.扩展项目

  • ef expend(file_name):
        f = open(file_name,'r')
        fline = 0
        lined = 0     # 行数
        empty_line = 0 # 空行数
        code_line = 0  # 代码行
        comment_line = 0# 注释行
        is_comment = False #行注释标记
        comment_sign = 0
        read = f.read().split(r'\n')
        
        for line in read:
            fline += 1
            line= line.strip()
            if not is_comment:
                if len(line)<=1:
                    empty_line += 1
                elif line.startswith('#'): #检索'#'
                    comment_line += 1
                elif line.startswith("'''") or line.startswith('"""'):
                     comment_sign += 1
                     lined=fline
                     is_comment =True
                     if  comment_sign%2==0 and comment_sign>0:
                         comment_line = comment_line + fline - lined
                         is_comment = False
                         lined = fline
                else: code_line += 1
                    code_line += 1    
        print('空行数:',empty_line)    
        print('代码行:',code_line)    
        print('标识行:',comment_line)    
        

    主函数

  • def main()
       str.name = input('请输入命令及地址:\n').split()
       if   str == '-c':
           print ('字符数:',getchar(name))
       elif str == '-w':
           print ('单词数:',getwords(name))
       elif str == '-1':
           print ('行数:',getline(name))    
       elif str == '-a':
           getexpend(name)
       

    六.测试运行

  • 字符数
  • 行数
  • 单词数
  • 扩展项目
  • 项目总结

  • 这是第一次自己动手做项目,过程中难免有些枯燥,反复不断的查找资料以及修复bug和错位。首先是进一步加深了以前对这些函数单纯只是概念的理解,加深了自己的印象和使用技巧,其次也深刻的意识到自己的打代码的不熟练。革命尚未成功,同志仍需努力。

标签:comment,字符,exe,wc,name,read,file,line
来源: https://www.cnblogs.com/impossible2333/p/12548179.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有