В Power Builder пытается заменить escape-символ знаком ~
Я новичок в энергетике, я пытаюсь использовать функцию замены. Мне нужно было заменить aposthope(') в строке на ~', но это выдает ошибку "Список неверных аргументов для функции: заменить" .
Signature = "Gagandeep S'ingh"
Signature = Replace (Signature , "'", "~'")
Любая помощь здесь, пожалуйста.
3 ответа
Тильда - это модификатор персонажа в PowerBuilder. Первая функция, которую он имеет, - это представление специальных символов, поэтому ~r, ~n, ~t
для возврата каретки, перевода строки и табуляции. Вторая функция - это escape, который удаляет любое специальное значение следующего символа. Это позволяет вам писать такие вещи, как "~""
сделать строку, которая содержит символ кавычки. В таком случае лучше написать '"'
, но если вы уже сделали это и хотите одну цитату, вы должны избежать этого. Создание выражений для DataWindow требует дополнительных уровней выхода, в которые я не буду вдаваться. Что происходит, когда ты пишешь "~'"
в том, что тильда говорит PowerBuilder обрабатывать одиночную кавычку как обычный символ. В любом случае это будет сделано в этом случае, поскольку оно не находится внутри строки в одинарных кавычках. Вот почему вы заменяете "другим". Если вы хотите ~ ', вы должны написать "~~'"
, Первая тильда говорит PowerBuilder обрабатывать следующую тильду как обычный символ, и в итоге вы получаете ~ '. Списки справки PowerBuilder ~~
в качестве специального символа для тильды, и ~'
а также ~"
для символов кавычек, но когда вы работаете с более чем одним уровнем побега, вам лучше воспринимать это как побег и работать слева направо.
Из справки PowerBuilder:
Заменить функцию PowerScript
Заменяет часть одной строки другой.
Синтаксис: Заменить (строка1, начало, n, строка2)
Вам необходимо указать, сколько символов вы хотите заменить. Если вы хотите вставить string2 в string1, вы используете 0.
Так что с вашим примером вы должны попробовать что-то вроде:
IF POS(Signature, "'") > 0 THEN
Signature = Replace (Signature, POS(Signature, "'"), 1, "~'")
END IF
Вот мой текущий код:
llSigCount = ldsSig.Retrieve(iuQstr.isPtID, iuQstr.ilPtVisitID, iuQstr.ilQstrID, AUTH_EVENT_TYPE)
IF llSigCount > 0 THEN
lsSignature = ldsSig.GetItemString(1, "cf_name_date")
IF POS(Signature, "'") > 0 THEN
Signature = Replace (Signature, POS(Signature, "'"), 1, "~'")
END IF
dw_edit.Modify("auth_signature_t.Text='" + lsSignature + "'")
END IF