gpt4 book ai didi

python - 从文件中提取单词,然后列出文件以及包含这些单词的行号

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:44 24 4
gpt4 key购买 nike

我有一个名为 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)
],

}

最佳答案

这个[在 bash 中]怎么样?

$ pattern="\\<($(grep '^#define ' Strings.h | cut -d' ' -f2 | tr '\n' '|' | sed 's/|$//'))\\>"
$ find project_dir -iname '*.m' -exec egrep -Hno "${pattern}" {} + > matches

输出:

project_dir/bar.m:132:LATITUDE_WORD
project_dir/baz.m:22:LONGITUDE_WORD
project_dir/bim.m:112:LONGITUDE_WORD
project_dir/foo.m:42:LATITUDE_WORD

编辑:我更改了上面的代码以将其输出重定向到文件matches,因此我们可以使用它来显示从未找到的单词:

for word in $(grep '^#define ' Strings.h | cut -d' ' -f2)
do
if ! cut -d':' -f3 matches | grep -q "${word}"
then
echo "${word}"
fi
done

关于python - 从文件中提取单词,然后列出文件以及包含这些单词的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com