Главная страница
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.008 c
15-1324540812
Фокс Йожин
2011-12-22 12:00
2012.04.29
Глюки IE9 с фреймами


2-1325419670
elizaveta1541
2012-01-01 16:07
2012.04.29
Сохранение текстовых строк, введённых в RichEdit в файле


2-1325747937
Gu
2012-01-05 11:18
2012.04.29
dll без менеджера памяти для передачи строк


2-1325671887
jacksotnik
2012-01-04 14:11
2012.04.29
Вопрос по отладчику


4-1256726104
Инна
2009-10-28 13:35
2012.04.29
Bitmap+Lineto