私は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)
],
}