![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как одиночные 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]);