python实现wc

2021-06-28 11:04

阅读:316

标签:设计文档   信息   repo   单词   灵活   常见   程序员   evel   space   

wordcount

项目相关要求

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

    • 具体功能要求:
      程序处理用户需求的模式为:
      wc.exe [parameter] [file_name]
    • 基本功能列表:
      wc.exe -c file.c//返回文件 file.c 的字符数(实现)
      wc.exe -w file.c//返回文件 file.c 的词的数目(实现)
      wc.exe -l file.c//返回文件 file.c 的行数(实现)
    • 拓展功能:

      • -s   递归处理目录下符合条件的文件。(基本实现)
      • -a   返回更复杂的数据(代码行 / 空行 / 注释行)。(基本实现)
      • 空行:本行全部是空格或格式控制字符,如果包括代码,则
        只有不超过一个可显示的字符,例如“{”。
      • 代码行:本行包括多于一个字符的代码。
      • 注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:
         } //注释
        在这种情况下,这一行属于注释行。
      • [file_name]: 文件或目录名,可以处理一般通配符。(未实现)
    • 高级功能:
      • -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。(实现)
        需求举例:
        wc.exe -s -a *.c
        返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

 


GITHUB

https://github.com/06linxi/wordcount

遇到的困难及解决方法

  • 困难描述:各种bug
  • 做过哪些尝试:百度
  • 是否解决:基本解决
  • 有何收获:灵活使用搜索工具

关键代码or设计说明

#判断是否是注释行

def isCmt(line, multiCmtFlagIdx):
singleCmtFlag = ‘//‘ # 单行注释符号
startCmtFlag = "/*"
endCmtFlag = "*/"
isCmtRet = True
# print ‘line: ‘ + line.strip()
if multiCmtFlagIdx == False: # 不在多行注释中
# 单行注释
# re.match(pattern, string, flags=0),匹配开头,\s是任意空白字符
if re.match(r‘(\s)*‘ + singleCmtFlag, line):
return isCmtRet, multiCmtFlagIdx
# 多行注释开始符号
if startCmtFlag in line: # 找到多行注释开始符号
if endCmtFlag in line:
multiCmtFlagIdx = False
return isCmtRet, multiCmtFlagIdx
return isCmtRet, multiCmtFlagIdx
else:
# 没有找到多行注释开始符,继续查找下个类型的符号
multiCmtFlagIdx = False
isCmtRet = False
return isCmtRet, multiCmtFlagIdx
else: # 在多行注释中
# 多行注释开始符
if endCmtFlag in line:
multiCmtFlagIdx = False
# print isCmtRet, multiCmtFlagIdx
return isCmtRet, multiCmtFlagIdx # 返回是否注释行,以及当前是否在多行注释中

#相关计算

 

def get_count(data):
chars = len(data)
words = len(data.split())
lines = data.count(‘\n‘)
return lines, words, chars

测试运行

技术分享图片

技术分享图片

技术分享图片

 

技术分享图片

 

 

PSP

  • 实现之前先在PSP中预估时间
  • 实施后各个环节实际花费多少时间也请做记录
  • 表中有一项: Estimate 指的“预估”这个活动,“预估时间”也是一项任务。
    • 例如:我估计自己需要花30分钟来估算出整个项目需要多少时间完成,结果我花了20分钟估算出整个项目需要6个小时完成。Estimate这一项应该在“预估耗时”填写30分钟,实际耗时填写“20”分钟。
  • 一级和二级活动的包含关系:
    • Planning 这个一级活动包含了1个二级活动(Estimate)
    • Development 这个一级活动包含了8个二级活动
    • Reporting 这个一级活动包含了3个二级活动
  • 大家在记录时间的时候, 只用记录二级活动, 然后把总数加了, 就是相应的一级活动的时间
  • 这个时间的长短并不会对分数有直接影响,这是为了大家自己总结。
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 600 600
· Estimate · 估计这个任务需要多少时间 600 600
Development 开发 540 540
· Analysis · 需求分析 (包括学习新技术) 60 60
· Design Spec · 生成设计文档 30 30
· Design Review · 设计复审 (和同事审核设计文档) 30 30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 30
· Design · 具体设计 30 30
· Coding · 具体编码 300 300
· Code Review · 代码复审 30 30
· Test · 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 60 60
· Test Report · 测试报告 40 40
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10
  合计 600 600

python实现wc

标签:设计文档   信息   repo   单词   灵活   常见   程序员   evel   space   

原文地址:https://www.cnblogs.com/5185jim/p/9642523.html


评论


亲,登录后才可以留言!