Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как одиночные Enter удалить, а в двойных оставить только один? [D7, WinXP]


Vovkin 3 ©   (2005-07-05 20:54:00) 

Как Enter убирать из текста сделал.
Но есть текст с двойными и одиночными Enter.
Как мне сделать так:
Одиночные Enter удалить, а в двойных оставить только один?

procedure Clean(Sender: TObject);
var
tempstr:WideString;
i:byte;
bool:boolean;
begin
if CheckBoxE.Checked=true then begin

if RadioButtonDE.Checked=true then begin
while pos(#13#10,tempstr)<>0 do
delete(tempstr,pos(#13#10,tempstr),2);
end;

if RadioButtonDME.Checked=true then begin
while pos(#13#10#13#10,tempstr)<>0 do
delete(tempstr,pos(#13#10#13#10,tempstr),2);
end;

if RadioButtonROE.Checked=true then begin
????????????????????????????????????????7
end;

end;
end;


Vovkin 3   (2005-07-08 03:08:00) [1]

MBo ©   (07.07.05 08:22) [8]
И еще, нечему там виснуть у него, поскольку Len(tempstr)=0
Все должно работать мгновенно и процедуру можно переписать следующим образом.
procedure Clean(Sender: TObject);
begin
 //
end;
Конечно нечему


Anatoly Podgoretsky   (2005-07-07 09:06:00) [2]

MBo ©   (07.07.05 08:22) [8]
И еще, нечему там виснуть у него, поскольку Len(tempstr)=0
Все должно работать мгновенно и процедуру можно переписать следующим образом.
procedure Clean(Sender: TObject);
begin
  //
end;


Slym   (2005-07-07 09:02:00) [3]

А че если в TStringList загрузить...
Удалить все пустые строки и сохранить
var
 StringList:TStringList;
 i:integer;
 str:string;
begin
 StringList:=TStringList.Create;
 try
   StringList.Text:=Str;
   for i:=0 to StringList.Count-1 do
     if length(StringList[i])=0 then
       StringList.Delete(i);
   Str:=StringList.Text;
 finally
   StringList.Free;
 end;
end;


MBo   (2005-07-07 08:22:00) [4]

В каком виде дан исходный текст - текстовый файл или просто одна строка, содержащая весь текст?
WideString использовано просто так или по делу?


Думкин   (2005-07-07 07:24:00) [5]

> Вообщем я сделал. Но прога не зависает если мало символов

В общем - что именно и главное - как?
Не зависает - или таки? Как узнали?
Пробовали код [5] Alexander Panov ©   (06.07.05 12:05) ?! Вставьте счетчик. А то Виснет много чего. :(


Vovkin 3   (2005-07-07 01:37:00) [6]

Вообщем я сделал. Но прога не зависает если мало символов.
Если 250 000 то всё нормально.
А мне надо было 3 000 000.\(так висло)
По 250 000 делал.
Где то видел инфу как работать с большими размерами
Сейчас не нашёл.
Подскажити если кто занет?


Alexander Panov   (2005-07-06 12:05:00) [7]

function DelCR(const s: String): String;
type
 TState=(stNone,stFirst,stNext);
var
 State: TState;
 i: Integer;
 Ch: Char;
begin
 Result := '';
 State := stNone;
 i := 1;
 while i<=Length(s) do
 begin
   Ch := s[i];
   case State of
     stNone:
       case Ch of
         #13: State := stFirst;
         else
         begin
           Result := Result+Ch;
           Inc(i);
         end;
       end;
     stFirst:
       case Ch of
         #13:
           begin
             Result := Result+Ch;
             Inc(i);
           end;
         #10:
           begin
             Result := Result+Ch;
             Inc(i);
             State := stNext;
           end;
         else State := stNone;
       end;
     stNext:
       case Ch of
         #13,#10:
           begin
             Inc(i);
           end;
         else State := stNone;
       end;
   end;
 end;
end;


Alexander Panov   (2005-07-06 11:49:00) [8]

Простой автомат.


Fay   (2005-07-06 09:19:00) [9]

Юрий Зотов ©   (05.07.05 23:32) [2]
Предполагается, что #1 не встречается в тексте, но есть #13#10 по N > 2 штук к ряду?


Юрий Зотов   (2005-07-05 23:32:00) [10]

S := StringReplace(StringReplace(StringReplace(S, #13#10#13#10, #13#10#1, [rfReplaceAll]), #13#10, '', [rfReplaceAll]), #1, #13#10, [rfReplaceAll]);


Fay   (2005-07-05 20:55:00) [11]

s := StringReplace(s, ''#13#10#13#10, ''#13#10, [rfReplaceAll]);


Наверх

Титульная страница Поиск, карта сайта Написать письмо