На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania 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_
  
> Удаление строк в XML, Удаление нескольких фиксированных строчек
    Есть xml (конфиг .cfg):

    ExpandedWrap disabled
      <?xml version="1.0" encoding="UTF-8"?>
      <setup title="${{ProductTitle}}">
      ...
          <manifest>
              <file name="setup.exe" core="true"/>
              <file name="setup.cfg"/>
              <file name="eula.txt"/>
              <file name="${{EulaHtmlFile}}"/>
              <file name="${{FunctionalConsentFile}}"/>
              <file name="${{PrivacyPolicyFile}}"/>
              <file name="${{InstallerDllDirectory}}/NVI2.dll" core="true"/>
              <file name="${{InstallerDllDirectory}}/NvInstallerUtil.dll" core="true"/>
              <file name="${{InstallerDllDirectory}}/NVI2UI.dll" core="true"/>
      ...
          </manifest>
      </setup>


    Мне нужно удалить несколько строчек:
    <file name="${{EulaHtmlFile}}"/>,
    <file name="${{PrivacyPolicyFile}}"/>,
    <file name="${{InstallerDllDirectory}}/NVI2UI.dll" core="true"/>


    - как это осуществить, глядел в сторону парсинга, но запутался в доску...

    Вот наработка по поиску этих строк:

    ExpandedWrap disabled
      var
        i: Integer;
        s: string;
      begin
        XMLDocument1.LoadFromFile('setup.cfg');
        XMLDocument1.Active:= true;
        RootNode:= XMLDocument1.DocumentElement;
        for i:= 0 to RootNode.ChildNodes['manifest'].ChildNodes.Count - 1 do
        mmo1.Lines.Add(RootNode.ChildNodes['file'].ChildNodes[i].Text);
        //XMLDocument1.ChildNodes.Delete(i); - этим хотел удалять


    В мемо ничего не выводится...
    Подпись выключена.
      Самый простой и топорный вариант - читать построчно, искать вхождения, фильтровать.
      Если же идти через XML, то сначала читать про устройство формата и его объектную модель. Потому как приведенный код показывает, что ты в нем ни в зуб ногой.
      Codero ergo sum
      // Программирую — значит, существую
        Цитата Fr0sT @

        Это точно...

        Вот мне помогли:
        ExpandedWrap disabled
          procedure TForm1.Button1Click(Sender: TObject);
          const A: array [1..3] of String = ('EulaHtmlFile', 'PrivacyPolicyFile', 'NVI2UI.dll');
          var i, j: integer;
              L: TStringList;
          begin
           L := TStringList.Create;
           L.LoadFromFile('setup.cfg');
           for i := L.Count - 1 downto 0 do
            for j := 1 to 3 do
             if Pos(A[j], L.Strings[i]) > 0 then
               begin
                L.Delete(i);
                break;
               end;
           L.SaveToFile('setup.cfg');
           L.Free;
          end;
        Сообщение отредактировано: Aqel -
        Подпись выключена.
          Aqel, задам пару наводящих вопросов, что помогут улучшить твой код:
          1. Зачем проверять все три значения каждый раз, когда одно или несколько уже были использованы для удаления (при условии, что строки встречаются всего по разу, разумеется)?
          2. Зачем дальше проверять файл, если все три строки уже удалены (при том же условии, что и выше)?
          Life is what happens to you while you're busy making other plans.
          Моя страница в Google+
            Цитата Profi @
            Aqel, задам пару наводящих вопросов, что помогут улучшить твой код:
            1. Зачем проверять все три значения каждый раз, когда одно или несколько уже были использованы для удаления (при условии, что строки встречаются всего по разу, разумеется)?
            2. Зачем дальше проверять файл, если все три строки уже удалены (при том же условии, что и выше)?

            Поясню:
            - Каждый раз можно и не проверять (лишние циклы и время) эти значения (они только один раз встречаются в этом файле).
            - Эти строки всегда находятся в конце .xml(.cfg) файла и находятся рядом (друг за другом или через одну строчку).
            ..думаю так яснее?.. :rolleyes:
            Сообщение отредактировано: Aqel -
            Подпись выключена.
              Цитата Aqel @
              Цитата Profi @
              Aqel, задам пару наводящих вопросов, что помогут улучшить твой код:
              1. Зачем проверять все три значения каждый раз, когда одно или несколько уже были использованы для удаления (при условии, что строки встречаются всего по разу, разумеется)?
              2. Зачем дальше проверять файл, если все три строки уже удалены (при том же условии, что и выше)?

              Поясню:
              - Каждый раз можно и не проверять (лишние циклы и время) эти значения (они только один раз встречаются в этом файле).
              - Эти строки всегда находятся в конце .xml(.cfg) файла и находятся рядом (друг за другом или через одну строчку).
              ..думаю так яснее?.. :rolleyes:

              Ну и как тогда должен выглядеть код?
              Life is what happens to you while you're busy making other plans.
              Моя страница в Google+
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script Execution time: 0,1079 ]   [ 15 queries used ]   [ Generated: 15.11.18, 08:27 GMT ]