我有一个名为 Strings.h 的文件,我用它来本地化我拥有的应用程序。我想搜索我所有的类文件,找出我是否以及在哪里使用每个字符串,并输出每个字符串的类和行号。
我的想法是使用 Python,但也许那是适合这项工作的错误工具。另外,我有一个基本算法,但我担心运行时间太长。你能写这个脚本来做我想做的事,或者只是建议一个更好的算法吗?
Strings.h 看起来像这样:
#import "NonLocalizedStrings.h"
#pragma mark Coordinate Behavior Strings
#define LATITUDE_WORD NSLocalizedString(@"Latitude", @"used in coordinate behaviors")
#define LONGITUDE_WORD NSLocalizedString(@"Longitude", @"used in coordinate behaviors")
#define DEGREES_WORD NSLocalizedString(@"Degrees", @"used in coordinate behaviors")
#define MINUTES_WORD NSLocalizedString(@"Minutes", @"Used in coordiante behaviors")
#define SECONDS_WORD NSLocalizedString(@"Seconds", @"Used in DMSBehavior.m")
...
该脚本应获取以#define 开头的每一行,然后列出出现在#define 之后的单词(例如)LATITUDE_WORD
伪代码可能是:
file = strings.h
for line in file:
extract word after #define
search_words.push(word)
print search_words
[LATITUDE_WORD, LONGITUDE_WORD, DEGREES_WORD, MINUTES_WORD, SECONDS WORD]
在获得单词列表后,我的伪代码类似于:
found_words = {}
for word in words:
found_words[word] = []
for file in files:
for line in file:
for word in search_words:
if line contains word:
found_words[word].push((filename, linenumber))
print found_words
因此,找到的单词看起来像:
{
LATITUDE_WORD: [
(foo.m, 42),
(bar.m, 132)
],
LONGITUDE_WORD: [
(baz.m, 22),
(bim.m, 112)
],
}