查找和替换文件名C标准(Find and replace file names to C stand

2019-10-28 14:02发布

我有一个朋友,其中包括有冲突的情况下共享的头一个项目(如:#包括"xyz.h" ,但实际的文件是Xyx.h )。

我应该如何解决这个问题?
我决定写一个Python或bash脚本来分析所有#include的,然后搜索,如果他们实际上是在目录中。 这是一个好的方法吗?
哪一个我应该使用,蟒蛇或bash。 我想,庆典会更容易些,因为它可以处理文件,并替换名称更容易。 但我必须写在我的bash脚本的正则表达式?

Answer 1:

一个单一的防弹解决方案:

  • 选择一个名字约定 - 全部小写可能是最常见的一种
  • 重命名所有包含文件为等效的小写 - 什么都不做,如果他们已经是小写
  • 持续检查所有的源文件,并确保它们实际上包括了小写的名字-这应该由手工完成,因为你不想来处理含litteral字符串#include

话虽这么说,如果文件的数量小,如果文件不是太复杂,这都不可能实现自动化。 但我的观点是,时间的增益是不值得的工具的开发和错误的在它的风险。



Answer 2:

这可能不太具有挑战性,我最初以为。

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))

这不是最漂亮的代码,我没有测试它(最好不要覆盖你的文件,直到您已经测试了这一点),但一般的方法应该工作,相当灵活。



文章来源: Find and replace file names to C standard