Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.12.2010, 21:10
Gate007 Gate007 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 9
Репутация: 10
По умолчанию Замена переносов на пробелы

Вот такой код:
Код:
function TForm1.DeleteLineBreaks(S: string): string;
var
  Source, SourceEnd: PChar;
begin
  Source := Pointer(S);
  SourceEnd := Source + Length(S);
  while Source < SourceEnd do
  begin
    case Source^ of
      #10: Source^ := #32;
      #13: Source^ := #32;
    end;
    Inc(Source);
  end;
  Result := S;
end;
Минус его состоит в том, что он заменяет 1 перенос строки на 2 пробела, а нужно, чтобы только на один.
На входе - поле мемо, в нем несколько строк. Функция вызывается с параметром DeleteLineBreaks(memo1.Lines.Text).
Ответить с цитированием
  #2  
Старый 13.12.2010, 21:33
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Обязательно использовать PChar? Со строками и StringReplace это делается в 4 строки кода... хоть и ни фига не оптимально...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 13.12.2010, 21:56
Gate007 Gate007 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 9
Репутация: 10
По умолчанию

глупый вопрос... а как?
Ответить с цитированием
  #4  
Старый 13.12.2010, 22:06
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код:
S:=StringReplace(S, #10#13, ' ', [rfReplaceAll]);
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 13.12.2010, 22:36
Gate007 Gate007 вне форума
Прохожий
 
Регистрация: 09.12.2010
Сообщения: 9
Репутация: 10
По умолчанию

Цитата:
Сообщение от v1s2222
Код:
S:=StringReplace(S, #10#13, ' ', [rfReplaceAll]);
не канает.
Код:
Writeln(f, StringReplace(memo1.Lines.Text, #10#13, ' ', [rfReplaceAll]));
В файле f вообще нет удаления переносов, все точь-в-точь как было введено в мемо.
Ответить с цитированием
  #6  
Старый 14.12.2010, 00:43
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
S:=StringReplace(S, #10#13, ' ', [rfReplaceAll]);
S:=StringReplace(S, #13#10, ' ', [rfReplaceAll]);
S:=StringReplace(S, #10, ' ', [rfReplaceAll]);
S:=StringReplace(S, #13, ' ', [rfReplaceAll]);
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 14.12.2010, 01:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,040
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Угу, а вот так в данном случае не проще:
Код:
function GetPlainText(AList : TStringList) : String;
var
  I : Integer;
begin
  Result := AList[0];
  For I := 1 To AList.Count-1 Do Result := Result + ' ' + AList[i];
end;

...

Writeln(f,GetPlainText(TStringList(Memo1.Lines)));
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter