Могу ли я установить определенный байт в строке? - PullRequest
1 голос
/ 15 декабря 2011

У меня очень длинная строка, возвращенная из os: cmd.Мой вывод exe-файла содержит некоторые символы с кодом 4, поэтому я заменил их на другой символ и поместил мета в начало выводаТеперь я хочу заменить символы обратно.Как я могу сделать это самым быстрым способом?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Я - нуль Эрланг, так что этот ответ, скорее всего, не самый лучший ответ. Вероятно, есть функция, которая делает это в главе, которой я еще не достиг в книге по программированию на Erlang. Тем не менее, я думаю, что это делает то, что вы хотите:

-module(replace).
-export([replace/3]).

replace([], _, _) -> [];
replace([OldChar | T], OldChar, NewChar) -> [NewChar | replace(T, OldChar, NewChar)];
replace([H | T], OldChar, NewChar) -> [H | replace(T, OldChar, NewChar)].

Он просто просматривает список (вашу строку) и заменяет старый символ новым. Это не обрабатывает I18N. Возможно, есть более быстрые способы сделать это. Это позволит вам сделать это:

24> replace:replace([48,49,50,51,52,53,54,55,56,57], 53, 45).
"01234-6789"

или это:

28> replace:replace("39582049867", 57, 45).
"3-58204-867"

С точки зрения самого быстрого пути - я собираюсь догадаться, что это будет предоставленная функция. Если нет, вам придется кодировать его различными способами и вводить числа.

1 голос
/ 16 декабря 2011

Строки Erlang являются списками.Списки Эрланга неизменны.Таким образом, вы не можете изменить отдельные байты в строке, вы можете только сгенерировать другую строку с заменой этих байтов.

Либо снова замените символы (используя map), либо передайте исходную строку вокруг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...