Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/53: Рейтинг темы: голосов - 53, средняя оценка - 4.68
0 / 0 / 1
Регистрация: 25.10.2008
Сообщений: 14

Удаление ненужных пробелов

13.01.2009, 12:09. Показов 10327. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем решил задачу: "Прочитать текстовый файл и удалить из него незначащие пробелы". Всё работает, но только для первой (одной строки). Если же в файле более одной строки, то программа выдаёт ошибку. Как я понял необходимо написать переход по строкам(Но у меня чёт не получается).

Вот код кнопки для удаления ненужных пробелов (Но это для одной строки. А нужно для нескольких!):

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Button2Click(Sender: TObject);
var
  i, n, L : integer;
  s       : string;
begin
  for i := 0 to Memo1.Lines.Count-1 do
  begin
    L := length(Memo1.Lines[i]);
    setlength(s,L);
    s := Memo1.Lines[i];
    while s[1]=' ' do
    begin
      Delete(s,1,1);
    end;
    while pos('  ',s)<>0 do
    begin
      n := pos('  ',s);
      Delete(s,n,1);
    end;
    L := length(s);
    if s[L]=' ' then
      Delete(s,L,1);
    Memo2.Lines[i] := s;
  end;
end;
(Пример:
Code
1
2
3
4
 Веб-страница   недоступна, так как
                ghjg   ch   
 gh
   вы работаете в автономном режиме.    Пожалуйста
Должно получиться:
Code
1
2
3
4
Веб-страница недоступна, так как
ghjg ch   
gh
вы работаете в автономном режиме. Пожалуйста
Выручите...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.01.2009, 12:09
Ответы с готовыми решениями:

Удаление ненужных объектов с фото
Доброй ночи, нужна программка на удаление ненужных объектов с фото при помощи любого алгоритма, пока стою на стадии что загрузилось...

Удаление ненужных тегов в richedit (цикл для строк)
Доброго времени суток! Помогите пожалуйста написать процедуру, которая бы удаляла для каждой строки лишние теги, пример для строки ...

удаление пробелов
Напишите программу, удаляющую из строки все пробелы Добавлено через 2 минуты даже если в строке стоят два пробела подряд они должны...

13
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
13.01.2009, 13:21
Замени Memo2.Lines[i] := s;
на Memo2.Lines.Add(s);
1
0 / 0 / 1
Регистрация: 25.10.2008
Сообщений: 14
13.01.2009, 15:35  [ТС]
Puporev Спасибо, всё заработало! Но если будет одна совсем пустая строка (в ней только много пробелов стоит), то как сделать что бы программа удалила в ней все пробелы, но она осталась пустой (т.е. она не исчезла)?
Пример:
Code
1
2
3
4
5
6
 Веб-страница   недоступна, так как
                ghjg   ch   
===================                         
   вы работаете в автономном режиме.    Пожалуйста
 
З.Ы. Где символ "=" означает пробел " ", ну чтобы понятно было что строка не совсем пуста
Должно получиться:
Code
1
2
3
4
Веб-страница недоступна, так как
ghjg ch   
{Здесь уже нет ни каких пробелов}
вы работаете в автономном режиме. Пожалуйста
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
13.01.2009, 18:09
Проверять лень, попробуйте так:
if L=0 then Memo2.Lines.Add('') //пустая строка
else Memo2.Lines.Add(s);
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
13.01.2009, 18:39
лучше так:
if trim(Memo1.Lines[i])='' then Memo2.Lines.Add('');

зы: а лучше заюзать регулярки + Memo.Text - тогда вообще можно будет в одну строку такой код написать
0
0 / 0 / 1
Регистрация: 25.10.2008
Сообщений: 14
13.01.2009, 19:47  [ТС]
Блин, чёт как не пробую вставить предложенные вами способы, ошибка возникает вот здесь:

Code
1
while s[1]=' ' do
Как только до 3 строки доходит, так сразу это и выбивает. Ни как не могу связать условие с этим while или можно как по другому?
0
0 / 0 / 0
Регистрация: 13.01.2009
Сообщений: 5
13.01.2009, 20:17
попробуйте поставить
Pascal
1
while (s[1]=' ') and (length(s)>0) do
0
0 / 0 / 1
Регистрация: 25.10.2008
Сообщений: 14
13.01.2009, 20:49  [ТС]
c00per Такая же ерунда, всегда когда возникает ошибка при перехоже на 3 строку ссылается на первый While...
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
13.01.2009, 21:40
trim() не юзали ?!
зачем велосипед изобретаем?
0
 Аватар для Splitter
203 / 145 / 16
Регистрация: 13.01.2009
Сообщений: 554
14.01.2009, 00:50
попробуй так

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  i, n, L : integer;
  s       : string;
begin
  for i := 0 to Memo1.Lines.Count-1 do
  begin
    L := length(Memo1.Lines[i]);
    setlength(s,L);
    s := Memo1.Lines[i];
   trim(s);
 i:=0;
while i<length(s)-2 do
begin
if ((s[i]=' ') and (s[i+1]=' ')) then Delete(s,i,1) else inc(i)
end;
    Memo2.Lines[i] := s;
  end;
Добавлено через 32 минуты 33 секунды
поправка предыдущего... эта процедурка уже точно работающая, берет текст из Memo1 и заменяет его на "безпробельный"...

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
 var
   i, j, n, L : integer;
   s       : string;
 begin
   for i := 0 to Memo1.Lines.Count-1 do
   begin
     L := length(Memo1.Lines[i]);
     setlength(s,L);
     s := Memo1.Lines[i];
    trim(s);
  j:=0;
 while j<length(s)-2 do
 begin
 if ((s[j]=' ') and (s[j+1]=' ')) then Delete(s,j,1) else inc(j)
 end;
       Memo1.Lines[i] := s;
 end;
   end;
1
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
14.01.2009, 03:51
было б интересно узнать - как сообщения свои грохать?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
14.01.2009, 08:04
было б интересно узнать - как сообщения свои грохать?
Стать модератором.
0
 Аватар для GalaX
701 / 573 / 59
Регистрация: 18.11.2008
Сообщений: 2,147
14.01.2009, 11:24
неужели чтоб грохать СВОИ сообщения - нужно быть либо модером либо админом, неудобно как-то...

зы: первый раз столкнулся с такой проблемой
0
0 / 0 / 0
Регистрация: 04.07.2017
Сообщений: 1
08.02.2011, 00:55
function DeleteRepeatedBlanks(s: String): String;
var k: Integer;
begin
Result:= Trim(s);
repeat
k:= Pos(' ',Result); // между апострофами 2 пробела
if k>0 then Delete(Result,k,1);
until k = 0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
begin
Memo2.Lines.Clear;
for i := 0 to Memo1.Lines.Count-1 do
Memo2.Lines.Add(DeleteRepeatedBlanks(Mem o1.Lines[i]));
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2011, 00:55
Помогаю со студенческими работами здесь

удаление пробелов
Создать приложение Visual. предлагающее пользователю ввести строку, из которой затем удаляются все лишние пробелы. Пробел лишний, если он...

Удаление излишних пробелов
На экране имеются Edit1,Edit2,Button1. В первом Edit содержится произвольное текстовое предложение. Предполагается, что между словами...

Удаление кратных пробелов
Как из строковой последовательности удалить кратные пробелы. Знаю как сделать для 2 под ряд идущх пробелов а для 3 и более затруднение....

удаление пробелов перед знаками препинания
здравствуйте! вот пишу программу, которая удаляет пробелы, если таковых в тексте встречаеться два или более.var c, i: integer; stt,...

Удаление лишних пробелов из текстового файла.
Загружаю в мемо текстовый файл, в котором в начале каждой строки идут пробелы. Как удалить эти пробелы? сможете мне помочь? спасибо..))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru