Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.29;
Скачать: CL | DM;

Вниз

проверить символы в строке   Найти похожие ветки 

 
zZZ   (2012-01-04 16:22) [0]

нужно написать функцию, которая проверяет содержит ли строка недопустимые символы. как лучше и правильнее обращаться к символам в строке: через указатели или напрямую. вот 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;


 
RWolf ©   (2012-01-04 17:19) [1]

с string вроде как побыстрее; впрочем, расходы на общение с БД многократно перекроют выигрыш.
и да, const перед строковым параметром сильно уменьшит общее время выполнения функции.


 
zZZ   (2012-01-04 17:31) [2]

ok, еще сопутствующий вопрос:

например у меня есть стринговое поле CodeField, для которого допустымыми являются строки, содержащие только буквы латинского алфавита и цифры.

может как-то можно на уровне TField контролировать вводимые значения, чтобы не писать функцию для проверки значения поля? т.е.

CodeField.AsString := ACode; <- если патаемся назначить полю значение содержащее недопустимые символы генерится исключение на уровне TField.

у TField есть свойства ValidChars, HasConstraint, CustomConstraint. Может их можно как-то использовать?


 
Sha ©   (2012-01-04 18:13) [3]

zZZ   (04.01.12 16:22)

Приведенные варианты дают разный результат на одинаковых строках.

Оба варианта можно ускорить.

Если множество недопустимых символов - "хорошая" константа,
то часто можно ускорить еще больше.



Страницы: 1 вся ветка

Текущий архив: 2012.04.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
8-1219132442
young
2008-08-19 11:54
2012.04.29
Как увеличить картинку bmp без потери качества


2-1325596272
serhiyiv
2012-01-03 17:11
2012.04.29
Медиа кнопки + message


15-1325052694
Медвежонок Пятачок
2011-12-28 10:11
2012.04.29
Камень в огород (джава комьюнити)


15-1324586003
Германн
2011-12-23 00:33
2012.04.29
Как очистить пространство имен СОМ-портов?


15-1324549390
Раммер
2011-12-22 14:23
2012.04.29
Посоветуйте книжку по SQL.