2013-10-25 3 views
1

У меня проблема с удалением вопросительных знаков. Я не хочу их в своей SQL-базе данных. Но мой код не работает, и я не знаю, где проблемы.Удалить вопросительные знаки

function RemoveQMark(sWork: String): String; 
begin 
    Delete(sWork, 2, 4); 
    Delete(sWork, Length, 2); 
    Result := sWork; 
end; 

Я хочу удалить ? в первой и последней позиции.

+0

Wat, какую позицию вы хотели бы удалить Qmark? – Hidden

+1

Известно, что удаление. Очевидно, что ваш код сломан. Поскольку вы не указали какую-либо информацию о том, какие значения вы передаете функции, или что такое 'Length', мы не можем отлаживать специфику. Таким образом, ответ заключается в том, что 'Delete' работает, ваш код не работает, если вы хотите, чтобы мы помогли, вам нужно предоставить реальную информацию. Как насчет SSCCE? –

+1

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

ответ

6

Нет необходимости использовать Delete на переданной в строке. Просто используйте функцию Delphi Copy скопировать все, кроме первых и последних символов непосредственно к результату:

function RemoveQMark(const sWork: String): String; 
begin 
    Result := Copy(sWork, 2, Length(sWork) - 2); 
end; 

Использование conston string arguments позволяют компилятору генерировать более эффективный код. (Без const счетчик ссылок строк увеличивается в начале функции и уменьшается в конце (в блоке try ... finally)).

+0

@ david - отредактирован, как вы предложили –

+0

Спасибо, и есть ваш +1 –

+2

+1 Для комментария 'const'. – NGLN

1
function RemoveQMark(sWork: String): String; 
begin 
    Delete(sWork, 1, 1); 
    Delete(sWork, Length(sWork), 1); 
    Result := sWork; 
end; 
+5

Почему вы изменяете входной параметр и присваиваете ему результат? Либо определите этот параметр как «var», либо выполните эту «процедуру» или создайте этот параметр 'const' и верните измененную строку в результат. – TLama