На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Исключить все строки где после символа есть набор букв
    Дан текст:
    123456789:aaaa!www
    123456789:aaaaZwww
    1234-!-56789:aaaawww
    12345-Z-6789:aaaawww

    Задание: В edit1 - пишем символы "!" и "Z" и программа исключает все строки, где после знака ":" - имеются символы "!" и "Z".

    На выходе должно получится:
    1234-!-56789:aaaawww
    12345-Z-6789:aaaawww

    Вопрос: Почему второй код через MEMO - Работает, А первый код через файл - дублирует значения и не работает. Где я допустил ошибку ???

    Первый код: Обработка через текстовый файл - неправильно работает:
    ExpandedWrap disabled
      procedure TForm1.Button1Click(Sender: TObject);
          var
          fall, f1: TextFile;
          S,s1: string;
          i: integer;
          L: TStringList;
          b: boolean;
          j: integer;
          begin
          //Открываем диалог выбора файла
          if OpenDialog1.Execute then
          begin
               AssignFile(fall, OpenDialog1.FileName);
               reset(fall);
               end;
       
       
          //работаем по строкам в файле
           while not Eof(fall) do
            begin
           //читаем строку
            ReadLn(fall, S1);
       
             if Length(Trim(Edit1.Text)) = 0 then Exit;
            s := Edit1.Text;
            L := TStringList.Create;
            L.NameValueSeparator := ':';
            L.Text := s1;
             for i := 0 to L.Count - 1 do
             begin
       
             b := true;
               for j := 1 to Length(s) do
                 if Pos(s1[j], L.ValueFromIndex[i]) > 0 then b := false;
               if b then L.Add(L.Strings[i]);
       
           L.SaveToFile('результат.txt');
             end;
            end;
       
          CloseFile(fall);
          L.Free;
          end;
       
          end.


    Второй код: А вот обработка через MEMO - правильно работает:
    ExpandedWrap disabled
       var L: TStringList;
          b: boolean;
          s: String;
          i, j: integer;
      begin
        if Length(Trim(Edit1.Text)) = 0 then Exit;
        s := Edit1.Text;
        L := TStringList.Create;
        L.NameValueSeparator := ':';
        L.Text := Memo1.Text;
        for i := 0 to L.Count - 1 do
         begin
           b := true;
           for j := 1 to Length(s) do
             if Pos(s[j], L.ValueFromIndex[i]) > 0 then b := false;
           if b then Memo2.Lines.Add(L.Strings[i]);
         end;
        L.Free;
      end;


    Помогите исправить ошибки в первом коде...!
    Сообщение отредактировано: Kirilis2018 -
      У вас после L.SaveToFile аж два end'а, а это означает, что вы не удаляете TStringList после каждой итерации цикла while; но создаёте его! Это, как минимум, неправильно.
        Цитата Славян @
        У вас после L.SaveToFile аж два end'а, а это означает, что вы не удаляете TStringList после каждой итерации цикла while; но создаёте его! Это, как минимум, неправильно.

        Переделал и снова результата ноль. По возможности подскажите как правильно будет.
        ExpandedWrap disabled
          procedure TForm1.Button1Click(Sender: TObject);
          var
          fall, f1: TextFile;
          S,s1: string;
          i,j: integer;
          L: TStringList;
          b: boolean;
          begin
          //Открываем диалог выбора файла
          if OpenDialog1.Execute then
          begin
               AssignFile(fall, OpenDialog1.FileName);
               reset(fall);
               end;
           
            if Length(Trim(Edit1.Text)) = 0 then Exit;
            s := Edit1.Text; // Фильтр который проверяет строки после знака :
            L := TStringList.Create;
           
          //работаем по строкам в файле
           while not Eof(fall) do
            begin
           //читаем строку
            ReadLn(fall, S1);
           
             L.NameValueSeparator := ':';
             L.Text := s1;
             for i := 0 to L.Count - 1 do
             begin
             b := true;
               for j := 1 to Length(s1) do
                 if Pos(s1[j], L.ValueFromIndex[i]) > 0 then b := false;
               if b then L.Add(L.Strings[i]);
             end;
            end;
            L.SaveToFile('Результат.txt');
           
            L.Free;
          CloseFile(fall);
           
          end;
          Цитата Kirilis2018 @
          А вот обработка через MEMO - правильно работает:

          Идя по пути меньшего сопротивления, видится логичным в мемо и загружать файл... :-?

          Добавлено
          раз уж в нем все работает, зачем изобретать велосипед? :-?
            Руслан, В memo большой файл не загрузить... Есть варианты как исправить - Первый код?.
            Сообщение отредактировано: Kirilis2018 -
              Все, вопрос решен. Доработал, только что, код благодаря - Славян. Всем спасибо за наставления!
              Сообщение отредактировано: Kirilis2018 -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0262 ]   [ 16 queries used ]   [ Generated: 19.04.24, 12:25 GMT ]