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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 21:26   #1
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию первый и последний символ в строке

Всем здрасьте!
Ребята подскажите, нужно узнать если первый и последний символ не буква или не дефис, то его удаляем:
себе представляю как то так -
Код:
while s[1] in not (['А'..'Я'],['A'..'Z'],'-') do delete(s,1,1);
или
if s[1] in not (['А'..'Я'],['A'..'Z'],'-') then delete(s,1,1);
а последний символ
Код:
 if copy(s,length(s),1) in not (['А'..'Я'],['A'..'Z'],'-') then delete(s,lenght(s),1)
но так конечно же не компилируется, помогите плиз...
AndreyF вне форума Ответить с цитированием
Старый 27.10.2009, 22:23   #2
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Код:
If not (s[1] in ['А'..'Я','A'..'Z','-']) then delete(s,1,1);//Первый символ
if not (S[Length(S)] in ['А'..'Я','A'..'Z','-']) then delete(s,length(s),1);//Последний символ
Весы слева =)
Будь проще, бери пример с одноклеточных

Последний раз редактировалось 856100; 27.10.2009 в 22:42.
856100 вне форума Ответить с цитированием
Старый 28.10.2009, 08:07   #3
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

Спасибо большое, помогло. Блин стыдно за вопрос....
AndreyF вне форума Ответить с цитированием
Старый 28.10.2009, 19:07   #4
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

эта функция проверяет строку - Наименование организаций.
В строке может быть что угодно, нужно избавиться от недопустимых символов, к примеру:
О ОО *рога и КОПЫТА*
или * " .
я вот написал конечно кое что, хотел чоб покритиковали эту функцию или может кто короче код знает, ведь краткость сестра таланта...
Код:
function Correction_Lines(s:String):String;
var
   ss:string;
   i:Integer;
begin
   if trim(s)<>'' then
      begin
         s:=trim(AnsiUpperCase(s));
         while not (s[1] in ['0'..'9','А'..'Я','A'..'Z']) do
            begin
               delete(s,1,1);
               if length(s)=0 then
                  begin
                     Correction_Lines:=ss;
                     exit;
                  end;
            end;
         while not (s[length(s)] in ['0'..'9','А'..'Я','A'..'Z']) do delete(s,length(s),1);
         while pos('  ',s)>0 do delete(s,pos('  ',s),1);
         for i:=1 to length(s) do if (s[i] in ['0'..'9','А'..'Я','A'..'Z',' ','-',',']) then ss:=ss+s[i]; end;
   Correction_Lines:=ss;
end;
AndreyF вне форума Ответить с цитированием
Старый 28.10.2009, 19:23   #5
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Правильно думаете, что код можно сократить:
Код:
Function Correct(S:String):String;
Var I:Integer;
Begin
Result:=S;
Result:=AnsiUpperCase(Result);
For I:=1 to Length(S) do
 If Result[I] in ['*', '#'] then Delete(Result, I, 1); //Можно заменить на If not (Result[I] in ['0'..'9','А'..'Я','A'..'Z') then Delete(Result, I, 1);
end;
* и # - недопустимые символы, можете свои добавить
Будь проще, бери пример с одноклеточных

Последний раз редактировалось 856100; 28.10.2009 в 19:43.
856100 вне форума Ответить с цитированием
Старый 28.10.2009, 20:17   #6
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

не совсем так, хотелось бы добиться -
НЕ УДАЛЯТЬ недопустимые символы,
а БРАТЬ нужные символы, т.е.
Код:
не так If Result[i] in ['*', '#'] then Delete(Result, I, 1);
а так if Result[i] not in ['0'..'9','А'..'Я','A'..'Z',' ','-',','] then Delete(Result, i, 1);
к примеру поле ИНН, как его проверять, взять только цифры, нежели перечислять то что нужно удалить.
с этим not у меня не компилируется.
жду рекомендаций......

Последний раз редактировалось AndreyF; 28.10.2009 в 20:24.
AndreyF вне форума Ответить с цитированием
Старый 28.10.2009, 20:39   #7
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Код:
if not (Result[i] in ['0'..'9','А'..'Я','A'..'Z',' ','-',',']) then Delete(Result, i, 1);
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 28.10.2009, 21:20   #8
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

спасибо большое.
AndreyF вне форума Ответить с цитированием
Старый 03.08.2016, 11:44   #9
BonD 007
Новичок
Джуниор
 
Регистрация: 04.03.2015
Сообщений: 2
По умолчанию

Хочу, чтоб при выходе из всех TEdit с конца удалялась запятая, запятая с нулём, ноль (при наличии запятой), два нуля, три и т. д.
Код работает, если в поле есть символы. При пустом, выдаёт ошибку: "Нарушение доступа по адресу...".
Код:
procedure TF.nExit(Sender: TObject);
var vrPos,vrLength:byte;
vP,vR:Char;
t:String;
begin
with (Sender as TEdit) do
  begin
    t:=Text;
    vrPos:=Pos(',',t);//номер позиции разделителя
    vrLength:=Length(t);//длина текста
    vP:=T[Length(t)]; //последний символ
    vR:=T[Length(t)-1];//предпоследний символ
    if vrPos=vrLength then begin Delete(t,vrPos,1);Text:=t end;
    if (vP='0')and(vrPos>0) then begin Delete(t,vrLength,1);Text:=t end;
    if (vP='0')and(vR='0')and(vrPos>0) then begin Delete(t,vrLength-1,2);Text:=t end;
  end;
end;
BonD 007 вне форума Ответить с цитированием
Старый 03.08.2016, 11:46   #10
BonD 007
Новичок
Джуниор
 
Регистрация: 04.03.2015
Сообщений: 2
По умолчанию

Знаю, что причина в «vP='0'». Проверка наличия текста (if Text<>'') не помогает...
BonD 007 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо сложить первый символ со вторым в edit CyberDemon324 Общие вопросы Delphi 11 21.10.2009 13:23
Первый символ в Edit-e artemavd Общие вопросы Delphi 2 24.09.2009 21:35
[Делфи]Как удалить последний символ в edit1.text? zotox Помощь студентам 3 05.08.2009 12:05
при чтении дважды выводится последний символ pavelstraut Общие вопросы C/C++ 9 23.07.2009 01:39
объясните почему рубится последний символ hen Общие вопросы C/C++ 4 07.04.2009 22:01