查找文件名并将其替换为C标准

时间:2018-06-07 10:44:28

标签: python bash parsing

我有一个由朋友共享的项目,其中包含有案例冲突的标题(例如:#include "xyz.h"但实际文件为Xyx.h)。

我该如何解决这个问题?
我决定编写一个python或bash脚本来解析所有#include,然后搜索它们是否实际在目录中。这是一个好方法吗?
我应该使用哪一个,python或bash。我认为bash会更容易,因为它可以更轻松地处理文件和替换名称。但是我必须在我的bash脚本中编写正则表达式吗?

2 个答案:

答案 0 :(得分:1)

一个单一防弹解决方案:

  • 选择名称约定 - 所有小写字母可能是最常见的
  • 将所有包含文件重命名为小写的等效文件 - 如果它们已经是小写,则不执行任何操作
  • 一致地检查所有源文件并确保它们实际包含小写名称 - 这应该手动完成,因为您不想处理包含#include
  • 的文字字符串

话虽这么说,如果文件数量很少,并且文件不是太复杂,这可能是自动化的。但我的观点是,时间的增加不值得开发工具和错误的风险。

答案 1 :(得分:1)

这可能不像我最初想的那么具有挑战性。

from glob import glob as gg

# read in list of .h files and build dictionary
hfiles = dict([(r, r.lower) for r in gg('srcDir/*.h')])

# read in c file
with open('srcDir/cfile.c', 'r') as tmp: 
    cfile = tmp.read().split('\n')

# make include replacements (assuming NO text in file prior to include statments...adjust as needed)
for r in arange(len(cfile):
    if ('# include' in cfile[r]) and (cfile[r].split()[-1] in hfiles):
        key = cfile[r].split()[-1].lower()
        cfile[r] = '# include ' + hfiles[key]

# now right out corrected c file
with open('dst/new_c_file.c', 'w') as fid:
    fid.write('\n'.join(cfile))

这不是最漂亮的代码,我还没有对它进行测试(最好不要覆盖你的文件,直到你测试过它),但一般的方法应该有效并且非常灵活。