@nalimite

Почему не работает сравнение tStringList?

Всем привет.
У меня есть два tStringList (MainBase, Domain)
В первом содержаться почты, во втором соответственно домены.
Мне нужно проверить каждую строку в MainBase присутствует ли в строке каждый домен из списка, если да то добавить в другой стринглист, если нет, еще в другой стринглист.

Вот мой код :

for i:=0 to MainBase.Count-1   do
   begin
    for j := 0 to Domains.Count-1 do
      begin
        if Pos(Domains[j], MainBase[i])>0 then
          begin
            NormalBase.Add(MainBase[i]);
          end else begin
            nNormalBase.Add(MainBase[i]);
          end;
      end;
   end;


Проблема в том, что при такой работе, если найден домен, добавляет в третий лист (NormalBase), а во втором (nNormalBase) добавляются совершенно все строки, независимо, найдено совпадение или нет.
Еще и в nNormalBase при добавлении все дублируется столько раз, сколько доменов в стринглисте.
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 2
Собственно, Вы так и написали код. Поскольку для каждого домена найдется случай НЕсовпадения с каким-либо из почтовых адресов, то каждый попадет в "плохой" список, причем многократно. Если Вам нужно найти список доменов, которым не соответствует НИ ОДИН из перечисленных почтовых адресов, то логичнее после составления "хорошего" списка, вторым проходом вычислить "плохой" путем вычитания из множества всех доменов множества "хороших" доменов.
Ответ написан
@kalapanga
Заведите булевый флажок Найдено. Перед циклом по Domains сбрасывайте его. В цикле при выполнении проверяемого условия добавляете строку в NormalBase, взводите флажок и прерываете цикл (break) - зачем дальше-то крутить? После цикла по Domains, проверяете флажок. Если не установлен, совпадений не было - добавляете строку в nNormalBase.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы