В 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
Другие вопросы по тегам