Удаление пустых строк

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Dimon32, 4 Jun 2010.

  1. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    У меня очень простой вопрос:
    Как удалить пустые строки и строки состоящие только из пробелов из 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);
    Не нужных строк остается гораздо больше.

    Я долго немог найти ответ в Гугле. Но истина где то рядом...
    Я думаю должно быть простое и гениальное решение для этой НЕВЕРОЯТНО трудно задачи! :confused:
     
  2. TrueBit

    TrueBit Member

    Joined:
    21 Nov 2009
    Messages:
    71
    Likes Received:
    19
    Reputations:
    4
    Попробуй так:
    PHP:
    for i:=memo1.lines.count-1 downto 0 do 
    begin
    if memo1.lines.strings[i]='' then 
    memo1
    .lines.delete(i);
    end;
     
  3. crystalbit

    crystalbit Elder - Старейшина

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    используй trim(Memo1.Lines.Strings) вместо Memo1.Lines.Strings в условиях.

    во втором варианте цикл неверный, количество меняется при удалении строки. верно будет for i:=memo1.lines.count-1 downto 0 do
     
  4. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    тему научись сначало правильно называть, затем хоть почитай доку по делфи, и тока потом называй это НЕВЕРОЯТНО трудной задачей.

    тебе реально достаточно пробежаться по всем элементам и сравнить по двум условиям
    1) пустая строка. просто проверяй <> '';
    2) проверя строку на пробелы. циклом прогоняй по всем символам и если символ не пробел, то строку оставляй в покое. тоже самое и на табуляторы проверяй.
    Хотя можеш и trim заюзать, но всё равно могут быть еще непечатные символы, которые трим может пропустить случайно
     
  5. flacs

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    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;
    
    
    Должно все работать)
     
  6. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    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;
     
  7. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Пустая строка в мемо это на самом деле #13#10, т.е. как бы не совсем пустая
     
  8. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Не работает

    Проверил - это АНТИВАРИАНТ. :(
    После первого нажатия на кнопку - почти ничо не удаляет.
    Нажимаю 2,3,4,5 раз - более менее что то удалило, но все же остаются строки из пробелов.
    Решение не найдено.
     
  9. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Не работает

    Проверил - тоже не работает.
    Остаются и пустые строки и строки из пробелов. :(
     
  10. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Не работает

    Проверил. Не работает. Остаются и пустые строки и строки из пробелов. :(
     
  11. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    ВОПРОС ОСТАЛСЯ ОТКРЫТЫМ.

    Тема названа так - потому что это действительно не простая задача, как оказалось - ни один из предложенных вариантов пользователями этого форума не сработал.​

    Я дофига прочитал, а нормального удаления пустых строк и строк состоящих из пробелов не нашел. Все методы не дают достаточного результата.
    Если знаеш учебник, который я пропустил - ткни пальцем. Буду очень благодарен.

    На словах то каждый тут просто гений, а реально работающий код никто не может предложить. Не ужели эта задача нерешаема? :confused:
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Может у тебя проблема в том, что в 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;
    
    Отлично удаляет пустые строки, строки состоящие из пробелов, строки состоящие из табуляторов и строки состоящие из табов и пробелов.
     
    #12 slesh, 5 Jun 2010
    Last edited: 5 Jun 2010
  13. AquaKlaster

    AquaKlaster Active Member

    Joined:
    9 Mar 2009
    Messages:
    0
    Likes Received:
    204
    Reputations:
    23
    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;
     
  14. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    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>
    
    ____________________________________________
    Вот отсюда нужно удалить лишние строки. Какие еще непечатные символы тут могут быть??? :confused:
     
    #14 Dimon32, 5 Jun 2010
    Last edited by a moderator: 5 Jun 2010
  15. AquaKlaster

    AquaKlaster Active Member

    Joined:
    9 Mar 2009
    Messages:
    0
    Likes Received:
    204
    Reputations:
    23
    Кидай такой длинный текст в тег CODE
     
  16. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    народ, вы не забывайте что проход должен быть с конца списка а не с начала, потому что строки сдвигаются и тогда будут пропуски.
     
  17. AquaKlaster

    AquaKlaster Active Member

    Joined:
    9 Mar 2009
    Messages:
    0
    Likes Received:
    204
    Reputations:
    23
    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
     
  18. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    СРАБОТАЛО!!!

    Чувак!!!! ты гений!! Невероятно, но это сработало! :D
    Спасибо большое!
     
  19. AquaKlaster

    AquaKlaster Active Member

    Joined:
    9 Mar 2009
    Messages:
    0
    Likes Received:
    204
    Reputations:
    23
    Советую юзать мой второй код, он работает с 1 memo!
     
  20. Dimon32

    Dimon32 New Member

    Joined:
    6 May 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Ваш этот тег убирает как раз ненужные строки))). (Когда вставляеш)