Использование Regsub для набора текста [join $ text \ n] в случае отсутствия скобки - PullRequest
0 голосов
/ 05 декабря 2018

Я получаю пропущенную ошибку закрывающей скобки для строки

set text [join $text \n] Весь мой код

proc ProcessText { text} {
   regsub -all -- ({) $text {\{} text 
   set text [join $text  \n]
   return $text
}

##it starts from here
set text "{a b c"
puts $text
puts [ProcessText $text]    

Если я использую regsub для замены {на любую правильную замену, которая будетне выдает ошибку, я получаю сообщение об ошибке "Отсутствует закрывающая скобка при выполнении" proc ProcessText {} "

, если я комментирую regsub, тогда я получаю сообщение об ошибке" несоответствующая открытая скобка в списке при выполнении "join $ text \ n"Может кто-нибудь, пожалуйста, предложите мне здесь, как действовать для того же самого в tcl.

К вашему сведению: текст - это список, который содержит много текстовой информации, в которой также есть {, если я удаляю {.Это работает не так.

1 Ответ

0 голосов
/ 05 декабря 2018

Как уже заметил Донал, именно форматирование значения, удерживаемого переменной text, не соответствует списку Tcl, что, однако, ожидается [join].

Ваши варианты:

1) Превратить значение в список Tcl с помощью [split]:

join [split $text] \n

2) Избегатьпреобразование в список и [join] в целом с помощью [string map]:

string map {" " "\n"} $text

(или используйте [regsub], как показано ниже, если вы не можете контролировать распространение пустого пространства вваш ввод)

Иногда строка лучше оставаться просто строкой;)

Varia

Использование [regsub] проблематично, прежде всего, лучше использовать его один раз, чтобы получитьваша конечная цель, а не санация входной строки перед вызовом [join]:

 regsub -all {\s+} $text "\n"

Background

Вы сталкиваетесь с ошибками, потому что вы не экранируете часовой { в регулярном выражении({) до [regsub] правильно:

regsub -all -- ({) $text {\{} text

Это должно быть:

regsub -all -- {\{} $text {\{} text

В вашем варианте { считается открывающей скобкой, которая на самом деле не соответствуетв оставшейся части сценария.

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