Как использовать левую фигурную скобку и правую фигурную скобку в строковой карте в Tcl - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь использовать функцию сопоставления строк в моем скрипте.У меня есть атрибут, значение которого выглядит ниже:

{{1234||}{2345||}}

Я хочу заменить всю открывающуюся фигурную скобку пустым символом, а ||} - запятой ,.Как я могу использовать функцию карты?

Как убрать скобки выше?

Ответы [ 3 ]

2 голосов
/ 07 мая 2019

Руководство должно быть достаточно ясным, но на всякий случай ...

set s "{{1234||}{2345||}}"
set result [string map {"{" "" "||}" ","} $s]
puts $result
# 1234,2345,}

string map принимает список, содержащий пару строк.В каждой паре в этом списке слева направо первая будет заменена второй.

Поэтому в приведенном выше примере первая { будет заменена пустой, и когда это будет сделано,||} будет заменено на ,.Я использую кавычки, потому что для цитирования в Tcl используются скобки, и это может не всегда работать так, как вы хотите, если вы не слишком привыкли к тому, как работает механизм цитирования в Tcl.


Хотя яя не слишком уверен, если вышеупомянутый результат, который вы ищете?Вы можете использовать string trimright, если хотите удалить дополнительный ,}, который удалит все завершающие символы, которые являются , и }:

string trimright $result ",}"
# 1234,2345

Также sidenote, вы экранируете символы в Tcl, используяобратная косая черта (\).

0 голосов
/ 08 мая 2019

Вы всегда можете использовать list (или другие операции со списками) для построения термина отображения.Это прекрасное время для работы с интерактивным терминалом.

% list "{" "" "||}" ","
\{ {} ||\} ,

Теперь мы знаем, как выглядит буквальный список, мы можем использовать его в скрипте:

set s "{{1234||}{2345||}}"
set result [string map {\{ {} ||\} ,} $s]
puts "“$s” --> “$result”"
# “{{1234||}{2345||}}” --> “1234,2345,}”

Конечно, возможно, вы сообщали нам введенное значение в кавычках:

set s {{1234||}{2345||}}
set result [string map {\{ {} ||\} ,} $s]
puts "“$s” --> “$result”"
# “{1234||}{2345||}” --> “1234,2345,”

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

0 голосов
/ 07 мая 2019

Лучшее решение - использовать regsub, если вы хотите заменить части строки:

set str {{1234||}{2345||}}
regsub -all {\{} $str "" str
regsub -all {\|\|\}} $str "," str
puts $str
...