Как я могу повторить строку с escape-последовательностями в Nim? - PullRequest
0 голосов
/ 21 марта 2020

Если я выведу строку, подобную этой:

let s = "Hello\nworld"
echo s

Я получу:

Hello
world

Я хотел бы вывести: Hello\nworld

Я знаю, что я Можно использовать необработанные строковые литералы, если я определяю строку, но как мне это сделать, если строка исходит, например, из файла?

Полагаю, я ищу что-то похожее на питонов repr() function.

edit : есть функция repr для Nim. Тем не менее, вывод не то, что я ищу:

let hello = "hello\nworld"
echo repr(hello)

---- Output ----
0x7fc69120b058"hello\10"
"world"

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы можете использовать escape-функцию из пакета strutils.

import strutils

let s = "Hello\nWorld"
echo s.escape()

Это выведет:

Hello\x0AWorld

Текущая реализация функции escape Strutils переводит символ новой строки в шестнадцатеричное значение. Вы можете использовать следующий код, чтобы сделать это так, как это делает python.

func escape(s: string): string =
  for c in items(s):
    case c
    of '\0'..'\31', '\34', '\39', '\92', '\127'..'\255':
      result.addEscapedChar(c)
    else: add(result, c)

let s = "Hello\nWorld"
echo s.escape()

Вывод:

Hello\nWorld

Вот ссылки на документацию для escape и addEscapeChar функции

0 голосов
/ 23 марта 2020

Как насчет использования:

let s = r"Hello\nWorld"                                                                                                                  
echo s 

выведет:

Hello\nWorld
...