Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2009, 04:24   #1
elsin
Пользователь
 
Регистрация: 10.05.2008
Сообщений: 36
Восклицание Перебор вариантов... или что-то такое

Подскажите, пожалуйста, мне надо сделать проверку - нужный ли символ я загружаю. Вот функция:
Код:
function Proverka(c: byte):byte;
var
ch: byte;
begin
if ((ord(ch)=32) or (ord(ch)=33) or (ord(ch)=37) or (ord(ch)=40) or (ord(ch)=41) or (ord(ch)=42) or (ord(ch)=43) or (ord(ch)=44) or (ord(ch)=45) or
 (ord(ch)=46) or (ord(ch)=47) or (ord(ch)=48) or (ord(ch)=49) or (ord(ch)=50) or (ord(ch)=51) or (ord(ch)=52) or (ord(ch)=53) or (ord(ch)=54) or
 (ord(ch)=55) or (ord(ch)=56) or (ord(ch)=57) or (ord(ch)=58) or (ord(ch)=59) or (ord(ch)=63) or (ord(ch)=60) or (ord(ch)=61) or (ord(ch)=62) or 
(ord(ch)=94) or (ord(ch)=8470) or от 1040 до 1103 then
result:=1;
end;
Можно ли это сделать не перебирая руками?
Возникает лишь мысль сделать массив, в который эти числа загрузить, а потом проверять с ними. Есть ли еще более простые варианты?
СпасибО!
elsin вне форума Ответить с цитированием
Старый 15.01.2009, 08:23   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Во первых где у вас идёт присвоение значения переменной ch
Во вторых зачем зачем нужно вот это "if ord(ch)=..." можно просто
if ch=32 ....
используйте оператор "IN" а для больших чисел что то вроде
Код:
if (ch>=1040)and(ch<=1103).....
SERG1980 вне форума Ответить с цитированием
Старый 15.01.2009, 20:45   #3
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Хотелось бы только уточнить, что тип Byte не позволит работать с числами больше 255. Нужно использовать хотя-бы Word.
Jeni вне форума Ответить с цитированием
Старый 15.01.2009, 22:13   #4
elsin
Пользователь
 
Регистрация: 10.05.2008
Сообщений: 36
По умолчанию

Спасибо!
Про байты я понял когда считывал.
Вопрос сменился Делаю функцию проверки в процедуре, но у меня попадают 10 и 13 символы(новая строка и перевод каретки), хотя на мой взгляд - не должны.

Код функции:
Код:
function Proverka(ch: char):integer;   //функция проверки   
                                                             //нужности символа
begin
if ((ch=chr(32)) or (ch=chr(33)) or ((ch>=chr(40)) and (ch<=chr(63))) or (ord(ch)=94) or (ord(ch)=8470) or ((ch>=chr(1040)) and (ch<=chr(1103))) )  then
result:=1;
end;
Процедуры:
Код:
procedure TMainForm.Button2Click(Sender: TObject);               //биграммы
var
c2,c1:char;
myfile: textfile;
st: string;
count:integer;
Label
Label1;
label
label2;
begin
progressbar2.Position:=0;
count:=0;
if not fileexists('bigr.mdb')  then CreateAccessDatabase('bigr.mdb');
ADOConnection2.Connected:= true;
try
ADOCommand4.Execute;
except;
end;
ADOCommand5.Execute;
ADOQuery2.Active:=false;
progressbar2.max:=GetFileSize(Fname);
reset(myfile, Fname);
Label1:
read(myfile,c1);
progressbar2.Position:=progressbar2.Position+1;
if Proverka(c1)<>1 then
goto Label1;
label2:
while not eof(myfile) do
begin
st:='';
read(myfile,c2);
progressbar2.Position:=progressbar2.Position+1;
if ((proverka(c2)<>1)) then
goto label2
else
count:=count+1;
st:=inttostr(ord(c1))+'-'+inttostr(ord(c2));
ADOCommand6.Parameters.ParamByName('st1').value:= st;
ADOCommand6.execute;
Application.processmessages;
c1:=c2;
LabeledEdit2.Text:= inttostr(count);
Application.OnMessage := MainForm.AppMessage;
end;
ADOQuery2.Active:=true;
CloseFile(myfile);
end;
Считываю посимвольно, потом в цифровом коде закидываю в базу Access.
В цифровом, потому что аксесс не понимает регист букв.
Все работает нормально, вот только лишние символы.
elsin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое SMTP? Titan123 Свободное общение 5 18.06.2011 15:57
Что такое Hook? AngelOfDeath Общие вопросы Delphi 1 07.04.2008 15:14
Что-такое .Net Иллидан Общие вопросы .NET 3 17.01.2008 16:41
то такое мастерство в программировании, что такое мастер программист и что он может? Cezar Свободное общение 29 02.06.2007 23:48