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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2012, 14:10   #1
papa_serg
Пользователь
 
Регистрация: 01.04.2008
Сообщений: 14
По умолчанию Избавится от лишних запятых в тексте

Здравствуйте, есть текст в memo, подскажите, как из него вырезать лишние запятые и точки?
Грубо говоря, текст выглядит следующим образом:
"20 мая в ледовом дворце спорта ЦСК ВВС завершился первый чемпионат Самарской любительской хоккейной лиги. , , , , . , . , . . . , 5. , 5. ,. , . . , . . ,. , . . В финальной серии плей-офф группы "А" играли "Мир" и "Камелот". Для выявления победителя хоккейного сезона понадобилось провести две встречи. ".
По какому алгоритму, можно было бы вырезать выделенные жирным, лишние точки и запятые?
Спасибо!
papa_serg вне форума Ответить с цитированием
Старый 22.05.2012, 14:57   #2
Noor
Участник клуба
 
Аватар для Noor
 
Регистрация: 01.11.2006
Сообщений: 1,051
По умолчанию

примерно так, код не проверял.Тут проверяется
Код:
var
i:integer;
s:string;
begin
  s:='хоккейной лиги. , , , , . , . , . . . , 5. , 5. ,. , . . , . . ,. , . . В финальной ';
  for i:=0 to Length(s)-1 do
  begin
  if (s[i]=',') and (s[i+2]=',')then
  delete(s,i,3);
  end;
  writeln(s);

end.
Находим запятую и второй символ после нее, если и он запятая то удаляем 3 символа начиная от найденной запятой.Тоже самое нужно проделать и с точками и с точками и запятыми

Последний раз редактировалось Noor; 22.05.2012 в 15:00.
Noor вне форума Ответить с цитированием
Старый 22.05.2012, 14:57   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Прогнаться циклом по символьно и сравнивать два рядом находящихся символа например. Способов конечно много разных напридумывать.
FaTaL вне форума Ответить с цитированием
Старый 22.05.2012, 19:45   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Noor,
Код:
var
i:integer;
s:string;
begin
  s:='хоккейной лиги. , , , , . , . , . . . , 5. , 5. ,. , . . , . . ,. , . . В финальной ';
  for i:=0 to Length(s)-1 do
  begin
  if (s[i]=',') and (s[i+2]=',')then
  delete(s,i,3);
  end;
  writeln(s);

end.
верно работать не будет... т.к. у тебя цикл перебирает индексы, и в этом же цикле ты изменяешь длину строки...


papa_serg,
что должно остаться между 5ками? "5.5."? или "5,5." или же "5 5."?

Последний раз редактировалось unbanned; 22.05.2012 в 21:32.
unbanned вне форума Ответить с цитированием
Старый 22.05.2012, 19:48   #5
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от unbanned Посмотреть сообщение
Noor,
Код:
var
i:integer;
s:string;
begin
  s:='хоккейной лиги. , , , , . , . , . . . , 5. , 5. ,. , . . , . . ,. , . . В финальной ';
  for i:=0 to Length(s)-1 do
  begin
  if (s[i]=',') and (s[i+2]=',')then
  delete(s,i,3);
  end;
  writeln(s);

end.
верно работать не будет... т.к. у тебя цикл перебирает индексы, и в этом же цикле ты изменяешь длину строки...


papa_serg,
что должно остаться между 5ками? "5.5."? или "5,5."?



Код:
var
i:integer;
s:string;
begin
  s:='хоккейной лиги. , , , , . , . , . . . , 5. , 5. ,. , . . , . . ,. , . . В финальной ';
  for i:=Length(s)-1  downto 1 do
  begin
  if (s[i] in [',','.'] ) and (s[i-2] in [',','.']) then
  delete(s,i,2);
  end;
  writeln(s);

end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 22.05.2012, 20:46   #6
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

denisbrain
у тебя остаются лишние пробелы...

тогда уже как-то так
Код:
var
  s: string;

begin
  s := '20 мая в ледовом дворце спорта ЦСК ВВС завершился первый чемпионат Самарской любительской хоккейной лиги.
 , , , , . , . , . . . , 5. , 5. ,. , . . , . . ,. , . . В финальной серии плей-офф группы "А" играли "Мир" и "Камелот". 
Для выявления победителя хоккейного сезона понадобилось провести две встречи. ';
  while (pos(' ,', s) > 0) or (pos(' .', s) > 0) or (pos('..', s) > 0) or (pos(',,', s) > 0) do 
  begin
    if pos(' ,', s) <> 0 then delete(s, pos(' ,', s), 2);
    if pos(' .', s) <> 0 then delete(s, pos(' .', s), 2);
    if pos('..', s) <> 0 then delete(s, pos('..', s), 2);
    if pos(',,', s) <> 0 then delete(s, pos(',,', s), 2);
  end;
writeln(s);
end.
возможно коряво, но тем не менее лишних пробелов не оставляет
да и цикл выполняется всего 13 раз, против где-то 300

кстати для memo это применимо только в таком виде...
Код:
  for i := 0 to mmo1.Lines.Count - 1 do
    s := s + trimleft(mmo1.Lines[i]);
  while (pos(' ,', s) > 0) or (pos(' .', s) > 0) or (pos('..', s) > 0) or
    (pos(',,', s) > 0) do
  begin
    if pos(' ,', s) <> 0 then
      delete(s, pos(' ,', s), 2);
    if pos(' .', s) <> 0 then
      delete(s, pos(' .', s), 2);
    if pos('..', s) <> 0 then
      delete(s, pos('..', s), 2);
    if pos(',,', s) <> 0 then
      delete(s, pos(',,', s), 2);
  end;
  mmo1.Lines.text := s;

Последний раз редактировалось unbanned; 22.05.2012 в 21:34.
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавится от лишних библиотек? bill Помощь студентам 2 07.03.2012 10:09
посчитать кол-во запятых в ячейке >(^.^)< Blame Microsoft Office Excel 6 26.12.2011 05:53
избавится от ScrollBar... Roof Общие вопросы Delphi 9 28.03.2011 09:59
Экранирование кавычек и запятых в Delphi eFail Общие вопросы Delphi 26 17.08.2010 16:31