Config列表内容["redis_host = 127.0.0.1","redis_port = 6379"]
时间: 2023-11-11 08:06:50 浏览: 126
问题出在 Config 列表的元素格式上。在 Erlang 中,元素应该是由键和值组成的元组。因此,你需要将 Config 列表中的每个元素转换成元组,再执行 keyfind 函数。下面是一个例子:
```
Config = [{"redis_host", "127.0.0.1"}, {"redis_port", "6379"}],
{ok, RedisHost} = lists:keyfind("redis_host", 1, Config).
```
这样就可以正确地找到 "redis_host" 键名对应的值,赋值给 RedisHost 变量。
相关问题
redis.config文件的数据是通过以下代码写进去的redis_write() -> %% 设置Redis的地址和端口 Address = "127.0.0.1", Port = 6379, %% 将Redis的地址和端口写入redis.config文件 {ok, File} = file:open("redis.config", [write]), io:fwrite(File, "redis_host = ~s~n", [Address]), io:fwrite(File, "redis_port = ~B~n", [Port]), file:close(File).
根据您提供的代码,`redis_write()` 函数的作用是将 Redis 服务器的主机名和端口号写入到 `redis.config` 文件中。通过这个函数写入到 `redis.config` 文件中的数据应该是符合 `redis_read()` 函数期望的格式的。
在这种情况下,您可以检查一下以下几点来解决问题:
1. 确保 `redis.config` 文件存在,并且数据已经成功地写入到文件中。
2. 确保 `redis_read()` 函数中解析 `redis.config` 文件的代码正确,并且没有其他语法错误或者格式错误。
3. 确保 Redis 服务器已经正确地安装和配置,并且正在运行。
如果您已经检查了上述问题,还是无法解决问题,可以尝试在代码中添加一些调试信息,以便更好地定位问题。例如,您可以在读取 `redis.config` 文件之前打印一下文件的路径,以确保它是正确的。
给我写一个文件读出来是这样 [{"redis_host", "127.0.0.1"}, {"redis_port", "6379"}]的代码
好的,你可以使用 Erlang 中的 file 模块和 io 模块来读取文件内容,并将其转换为列表形式。下面是一个例子:
```
read_config_file(FilePath) ->
{ok, File} = file:open(FilePath, [read]),
Content = io:get_line(File, ''),
file:close(File),
ConfigList = parse_config(Content),
ConfigList.
parse_config(Content) ->
Trimmed = string:trim(Content, right),
Config = "[" ++ Trimmed ++ "]",
{ok, Tokens, _} = erl_scan:string(Config),
{ok, Parsed} = erl_parse:parse_term(Tokens),
Parsed.
```
上面的代码中,`read_config_file/1` 函数负责读取文件内容并调用 `parse_config/1` 函数来将字符串转换为列表。`parse_config/1` 函数首先去掉字符串末尾的空格,然后将其拼接成一个形如 `"[{key1, value1}, {key2, value2}, ...]"` 的字符串,再使用 Erlang 的扫描和解析模块将其解析成列表形式。你只需要将文件路径作为参数传递给 `read_config_file/1` 函数即可。
阅读全文