Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
15-1324623216
Faceless
2011-12-23 10:53
2012.04.29
информация об используемых библиотеках


11-1243010637
MTsv DN
2009-05-22 20:43
2012.04.29
Build и Compile


15-1324593730
alexdn
2011-12-23 02:42
2012.04.29
Open source проект


2-1325418734
3asys
2012-01-01 15:52
2012.04.29
переход с Indy9 на Indy10


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский