![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проверить символы в строке
zZZ © (2012-01-04 16:22:00)нужно написать функцию, которая проверяет содержит ли строка недопустимые символы. как лучше и правильнее обращаться к символам в строке: через указатели или напрямую. вот 2 варианта.
функция будет использоваться для проверки значений полей при импорте данных из текстового файла в таблицу бд. может потребоваться импортировать 500 000 записей и для каждой записи вызвать ее и проверить значения для нескольких полей (500 000 records x N fields -> Call IsValidString). как будет быстрее всего.
type
{ }
TCharSet = set of Char;
function IsValidString1(String_: string; ValidChars: TCharSet): Boolean;
var
Char_: PChar;
begin
Result := False;
Char_ := PChar(String_);
while Char_^ <> #0 do
begin
if not (Char_^ in ValidChars) then
Exit;
Inc(Char_);
end;
Result := True;
end;
function IsValidString2(String_: string; ValidChars: TCharSet): Boolean;
var
I: Integer;
begin
Result := False;
for I := 1 to Length(String_) do
if not (String_[I] in ValidChars) then
Exit;
Result := True;
end;
Sha (2012-01-04 18:13:00) [1]zZZ (04.01.12 16:22)
Приведенные варианты дают разный результат на одинаковых строках.
Оба варианта можно ускорить.
Если множество недопустимых символов - 'хорошая' константа,
то часто можно ускорить еще больше.
zZZ (2012-01-04 17:31:00) [2]ok, еще сопутствующий вопрос:
например у меня есть стринговое поле CodeField, для которого допустымыми являются строки, содержащие только буквы латинского алфавита и цифры.
может как-то можно на уровне TField контролировать вводимые значения, чтобы не писать функцию для проверки значения поля? т.е.
CodeField.AsString := ACode;<- если патаемся назначить полю значение содержащее недопустимые символы генерится исключение на уровне TField.
у TField есть свойства ValidChars, HasConstraint, CustomConstraint. Может их можно как-то использовать?
RWolf (2012-01-04 17:19:00) [3]с string вроде как побыстрее; впрочем, расходы на общение с БД многократно перекроют выигрыш.
и да, const перед строковым параметром сильно уменьшит общее время выполнения функции.