该string
模块需要一个平面列表来使用。您正在向它传递一个列表列表。如果您的目标只是识别术语“blue()”的索引,那么您可以只使用 re 模块,而无需所有字符串拆分。
Data = file:read_file([File]),
case re:run(Data, "blue()") of % Note that re takes binaries, strings, and iolists as input
{match, [{StartIndex, StopIndex}]} -> io:format("~p", [StartIndex]);
nomatch -> io:format("Item not found.")
end.
或者,无需太多更改,您可以像这样在 Nlist 中查找术语“blue()”(打印该术语的行号和字符偏移量):
find_terms(Item, L) -> find_terms(Item, L, 1).
find_terms(Item, [], N) ->
ok;
find_terms(Item, [String|Rest], LineNumber) ->
case string:str(String, Item) of
0 -> % string:str returns 0 when the substring is not found
find_terms(Item, Rest, LineNumber + 1);
Index ->
io:format("~p:~p", [Line, Index]),
find_terms(Item, Rest, LineNumber + 1);
end.
你会用find_terms("blue()", Nlist)