|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.11.2007, 19:25 | #1 |
Регистрация: 03.12.2006
Сообщений: 5
|
Удаление спецсимволов
Доброго времени суток!
Возникла проблема такого рода: в текстовом файле необходимо убрать лишние пробелы и перевод строки (Enter). Была написана следующая подпрограма: var s: String; i,k:integer; begin s:= Memo1.Text; k:=length(s); i:=1; while i<(k-1)do begin if (s[i]=Chr(32)) and (s[i+1]=Chr(32)) or (s[i]=Chr(13)) then begin Delete(s,(i+1),1); i:=i+1; k:=k-1; end else begin i:=i+1; end; end; Memo2.text:=s; end; В результате удалются не все лишние пробелы,а символ перевода строки вообще не удаляется?! Не пойму в чем дело? Или я на столько тупой? |
20.11.2007, 20:07 | #2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Как только вы удаляете символ, длина строки уменьшается.
Следствие - нарушается порядок просмотра и следующий анализируемый символ - через один. В куске Delete(s,(i+1),1); i:=i+1; уберите i:=i+1; |
20.11.2007, 23:50 | #3 |
Регистрация: 03.12.2006
Сообщений: 5
|
При изменении кода по Вашему совету в итоге от текста остается только первая строка и больше ничего...
Если убирать i:=i+1; то, на мой взгляд, не будет перехода к следующему символу? или я ошибаюсь? З.Ы. При изменении Delete(s,(i+1),1); на Delete(s,i,1); результат не меняется!? |
21.11.2007, 00:04 | #4 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Исходная строка АБВ%%ГДЕЖЗ (% - это пробелы) Счетчик достигает значения 4, это - позиция пробела. Пробел удаляется, получаем АБВ%ГДЕЖЗ По вашему варианту счетчик увеличивается на 1 и становится = 5, т.е. следующим будет анализироваться символ... Какой? Символ "Г", и второй пробел будет пропущен... |
|
21.11.2007, 07:10 | #5 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
А вот такой вариант подойдет
Код:
|
21.11.2007, 08:23 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Насчет лишних пробелов можно так:
Код:
Здесь и переводы кареток удаляются но кривовато, надеюсь смысл ясен.
I'm learning to live...
|
21.11.2007, 17:19 | #7 |
Регистрация: 03.12.2006
Сообщений: 5
|
Благодарю всех за ответы.
Ваши варианты попробую и обязательно отпишусь. А что, выходит мой вариант совсем не подходит? |
21.11.2007, 17:35 | #8 |
Форумчанин
Регистрация: 22.06.2007
Сообщений: 414
|
Попробуй ещё функцию Trim(s:string)
Нет невыполнимых задач, всё дело времени...
|
21.11.2007, 21:26 | #9 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
stringreplace (str,' ','',[rfreplaceall]);
stringreplace (str,#13#10,'',[rfreplaceall]);
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
22.11.2007, 07:00 | #10 | ||
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Цитата:
Цитата:
::: Кстати, я сам про StringReplace совсем забыл. Конечно же решение Квэнди самое правильное. Хотя я все-таки поменял бы местами Код:
Последний раз редактировалось Sibedir; 22.11.2007 в 07:04. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаление из system32 | JRcoker | Общие вопросы C/C++ | 2 | 04.08.2008 00:32 |
Удаление файлов | Amery | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 04.05.2008 14:46 |
Каскадное удаление | BustA | SQL, базы данных | 1 | 16.01.2008 10:31 |
Удаление файла | Македонский | Общие вопросы Delphi | 5 | 06.09.2007 11:46 |
Удаление символов | MURAD | Общие вопросы C/C++ | 3 | 19.08.2007 01:25 |