У меня очень простой вопрос: Как удалить пустые строки и строки состоящие только из пробелов из memo1? Я пробовал 2 варианта: 1. вариант (более эффективный) Code: i:= 0; While i <> Memo1.Lines.Count - 1 do begin if Length(Memo1.Lines.Strings[i])=0 then begin Memo1.Lines.Delete(i); dec(i); end; inc(i); Next; end; Но все равно в середине или еще где то остается пара пустых строк и строки состоящие из пробелов тоже остаются. Это АНТИВАРИАНТ. Проблема не решена! 2. вариант. (Ваще не эффективный) Code: for i:=0 to memo1.lines.count-1 do if memo1.lines.strings[i]='' then memo1.lines.delete(i); Не нужных строк остается гораздо больше. Я долго немог найти ответ в Гугле. Но истина где то рядом... Я думаю должно быть простое и гениальное решение для этой НЕВЕРОЯТНО трудно задачи!
Попробуй так: PHP: for i:=memo1.lines.count-1 downto 0 do begin if memo1.lines.strings[i]='' then memo1.lines.delete(i); end;
используй trim(Memo1.Lines.Strings) вместо Memo1.Lines.Strings в условиях. во втором варианте цикл неверный, количество меняется при удалении строки. верно будет for i:=memo1.lines.count-1 downto 0 do
тему научись сначало правильно называть, затем хоть почитай доку по делфи, и тока потом называй это НЕВЕРОЯТНО трудной задачей. тебе реально достаточно пробежаться по всем элементам и сравнить по двум условиям 1) пустая строка. просто проверяй <> ''; 2) проверя строку на пробелы. циклом прогоняй по всем символам и если символ не пробел, то строку оставляй в покое. тоже самое и на табуляторы проверяй. Хотя можеш и trim заюзать, но всё равно могут быть еще непечатные символы, которые трим может пропустить случайно
Code: SL: TStringList; function CheckPattern(s: string; c: char): boolean; begin Result:=true; for i:=1 to Length(s) do if s[i]<>c then begin Result:=false; break; end; // если не пробел то строка не валидная end; SL:=TStringList.Create; for i:=0 to SL.Count-1 do if (Length(SL.Strings[i])=0) or (CheckPattern(SL.Strings[i], #32)) then SL.Delete(i); SL.Free; Должно все работать)
Code: procedure TForm1.Button1Click(Sender: TObject); var i, i2, schetchik: integer; current_str: string; begin for i:=0 to Memo1.Lines.Count-1 do begin schetchik:=0; if memo1.lines.strings[i]='' then begin memo1.lines.delete(i); end; for i2:=1 to length(Memo1.Lines.Strings[i]) do begin current_str:=Memo1.Lines.Strings[i]; if current_str[i2]=' ' then inc(schetchik); if schetchik=length(Memo1.Lines.Strings[i]) then memo1.lines.delete(i); end; end; end;
Не работает Проверил - это АНТИВАРИАНТ. После первого нажатия на кнопку - почти ничо не удаляет. Нажимаю 2,3,4,5 раз - более менее что то удалило, но все же остаются строки из пробелов. Решение не найдено.
ВОПРОС ОСТАЛСЯ ОТКРЫТЫМ. Тема названа так - потому что это действительно не простая задача, как оказалось - ни один из предложенных вариантов пользователями этого форума не сработал. Я дофига прочитал, а нормального удаления пустых строк и строк состоящих из пробелов не нашел. Все методы не дают достаточного результата. Если знаеш учебник, который я пропустил - ткни пальцем. Буду очень благодарен. На словах то каждый тут просто гений, а реально работающий код никто не может предложить. Не ужели эта задача нерешаема?
Может у тебя проблема в том, что в Memo1 находится не только пробелы и пустые строки или табуляторы а еще какая нить непечатная фигня? И ты по этому поводу мозги угукаешь людям. Code: var x : integer; begin for x := Memo1.Lines.Count - 1 downto 0 do begin if trim(Memo1.Lines.Strings[x]) = '' then Memo1.Lines.Delete(x); end; end; Отлично удаляет пустые строки, строки состоящие из пробелов, строки состоящие из табуляторов и строки состоящие из табов и пробелов.
Code: var I: Integer; begin for I := 0 to Memo1.Lines.Count - 1 do begin if (Memo1.Lines[I] <> '') and (Trim(Memo1.Lines[I]) <> '') then Memo2.Lines.Add(Memo1.Lines[I]); end; end;
HTML код в мемо находится. HTML код в мемо находится. А точнее - форма подписки на рассылку. Вот например: Code: <DIV align="center"><P style="font-family: Verdana; font-size:11px; text- indent:0px"><STRONG><FONT color="#cc0000" size="4" face="Verdana">Хотите бесплатно получать 2 -3 видеоурока каждый месяц? </FONT></STRONG></P></DIV> <TABLE width="477" height="230" border="0" align="center"> <TBODY><TR> <TD width="36%" rowspan="8" align="center" valign="top"><DIV class="widget"> <FORM name="SR_form" method="post" target="_blank" action="http://smartresponder.ru/subscribe.html" onsubmit="return SR_submit(this)"> <INPUT type="hidden" name="version" value="1"> <INPUT type="hidden" name="tid" value="34769"> <INPUT type="hidden" name="uid" value="27025"> <INPUT type="hidden" name="charset" value="windows-1251"> <INPUT type="hidden" name="lang" value="1"> <INPUT type="hidden" name="did[]" value="9267"> <P style="font-family: Verdana,sans- serif; margin:0px; padding:0px; color: #000000; font-size: 11px; font-weight: normal; text- indent:0px"> Ваше имя на русском: <INPUT type="text" name="field_name_first" size="23" value="" maxlength="50" style="border: 1px #c1c1c1 solid; font-family: Verdana; font-size: 11px; width:140; color:#424242;"></P> <P style="font-family: Verdana,sans- serif; margin:0px; padding:0px; color: #000000; font-size: 11px; font-weight: normal; text- indent:0px"> Ваш Email адрес: <INPUT type="text" name="field_email" size="23" value="" maxlength="50" style="margin:0px; padding:0px; border: 1px #c1c1c1 solid; font-family: Verdana; font-size: 11px; width:140; color:#424242;"></P> <P style="margin:5px;margin- top:10px; padding:0px; text-indent:0px"> <INPUT type="submit" name="SR_submitButton" value="Да, хочу" style=" font-family: Verdana, sans-serif; border:1px gray solid; font-size: 11px; width:140px; height:20px; background-Color:#f6f6f6; background-image: url(img/button2.gif); color:#000000; font-weight:bold;"> </P> </FORM> </DIV> <P style="font-family: Verdana; font-size:11px; text-indent:0px"><STRONG>Вводите данные в форму и жмите по кнопке "Да, хочу".</STRONG></P> <P style="font-family: Verdana; font-size:11px; text-indent:0px"><FONT color="#cc0000">Приватность Ваших данных гарантируется.</FONT></P> </TD> <TD width="64%"><P class="ds"><FONT color="#0500CC">+ <STRONG>Свежие скрипты</STRONG></FONT></P></TD> </TR> <TR> <TD><P class="ds"><FONT color="#0ECC00"> <STRONG>+ Свежие статьи</STRONG></FONT></P></TD> </TR> <TR> <TD><P class="ds"><FONT color="#cc0000">+ <STRONG>Свежие программы</STRONG></FONT></P></TD> </TR> <TR> <TD><P class="ds"> + Конкурсы с денежными призами</P></TD> </TR> <TR> <TD><P class="ds"> + <STRONG>100% авторский материал</STRONG></P></TD> </TR> <TR> <TD><P class="ds"> + Более 60000 читателей</P></TD> </TR> <TR> <TD><P class="ds"> + Более 100 положительных отзывов</P></TD> </TR> <TR> <TD><P class="ds"></P></TD> </TR> </TBODY></TABLE></TD></TR></TBODY></ TABLE></TD></TR></TBODY></TABLE></TD ></TR></TBODY> ____________________________________________ Вот отсюда нужно удалить лишние строки. Какие еще непечатные символы тут могут быть???
народ, вы не забывайте что проход должен быть с конца списка а не с начала, потому что строки сдвигаются и тогда будут пропуски.
Code: var I: Integer; begin I := 0; while Memo1.Lines.Count <> I do begin if (Memo1.Lines[I] <> '') and (Trim(Memo1.Lines[I]) <> '') then Inc(I) else Memo1.Lines.Delete(I); end; end; Данный код убрал пробелы и пустые строки с твоего HTML