1 (изменено: mfgroup, 2011-04-07 10:24:06)

Тема: VBScript: перебор строк на совпадение

Народ, приветствую всех. Стоит такая задача. Нужен скрипт на VBS.

Есть файл email.txt вида:

[SMTP]
;-------------------   SOMEBODY.COM  -----------------------------
user1@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/  (доп инфо о юзере)
[b]user2@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/[/b]
user3@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
.............................................................
user997@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/

;-------------------   DISABLED  -----------------------------
;user7@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;.............................................................
;user88@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;user889@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/

Функционал следующий:

На входе есть емейл пользователя в переменной, допустим, user2@email.com.

Нужно открыть файл email.txt, и, при нахождении в строке емейла юзера, нужно вырезать эту строку целиком (после емейла есть еще служебная инфо) и добавить ее целиком в конец этого же файла закомментированной в начале строки " ; ", либо если такого емейла нет добавить его емейл в другой файл типа noemail.txt.

То есть, должно выйти вот так после запуска скрипта:

[SMTP]
;-------------------   SOMEBODY.COM  -----------------------------
user1@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/  (доп инфо о юзере)
user3@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
.............................................................
user997@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/

;-------------------   DISABLED  -----------------------------
;user1@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;.............................................................
;user88@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;user889@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;user2@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/

В принципе не сильно сложно, но вижу проблему: если такой емейл уже есть, закомментированный типа ;user2@email.com, то он его еще раз запишет в конец типа ;;user2@email.com.
То есть, если было уже

;-------------------   DISABLED  -----------------------------
;user1@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;.............................................................
;user2@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;user88@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;user889@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/

чтобы не получилось

;-------------------   DISABLED  -----------------------------
;user1@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;.............................................................
;user88@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;user889@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/
;;user2@email.com        ghjghjghjhgjhgjhgnkjhgk g/hjthjt/y/hjbtjt/

То есть, самый основной момент вырезать строку, чтобы на том месте не было в тексте пустой строки.
Добавить в конец с комментом, и при втором-третьем-155 запуске скрипта, чтобы он не комментировал тот же емейл несколько раз.
Ведь, если такой емейл есть, но уже закомментированный, то не нужно его еще раз комментировать, и, тем более, записывать в файл noemail.txt
То есть останавливать чтение, например, по маске ;-------------------   DISABLED  ----------------------------- нельзя. Надо пройти каждый раз весь файл до конца.

2

Re: VBScript: перебор строк на совпадение

намного проще было бы коментить прямо в файле без перемещения. это понятно. но смысл в том, что емейлов 6-8тыщ. ящики отключаются пачками по 20-30 шт например. и если что то пойдет не так, то админ сможет в этом файле просто раскоментить последние 20-30 емейлов ручками в конце файла.
если будут в общем списке, то потом найти 20 емейлов среди 7 тыщ некомильфо.

3

Re: VBScript: перебор строк на совпадение

Проще было использовать какую нибудь базу данных, чем 8 тыс строк обрабатывать. При том не вижу сложности, проверять если строка содержит в начале символ ";" то не комментировать. И не будет множественного комментирования.

4 (изменено: mfgroup, 2011-04-06 13:21:40)

Re: VBScript: перебор строк на совпадение

Придумал алгоритм проще. но нет моска его написать на VBS.

переименовываем  файл email.txt в email_backup.txt (бекап тоже нужен )читаем исходный файл построчно, сравниваем строку на наличие user2@email.com, если нет такой, записываем эту строку в новый файл. mail.txt
если есть совпадение, то НЕ записываем строку в новый файл, а записываем в переменную. Доходим до конца файла. Потом в конец файла mail.txt дописывем значение ";"+переменная.
В итоге в новом файле будет строчка в строчку со старым КРОМЕ совпавшей строки, которую мы допишем в конец файла взяв ее с переменной.

Простой перебор ПОСТРОЧНО. То что решается через новый файл или просто считать в буфер - не страшно. Как раз нужен бекап исходного файла до модификации.

Алгоритм упрощается. Помогите плиз реализовать сам перебор.


база не катит. на входе сырой текстовый файл.
Потом проще допилить скрипт, чтобы он начинал перебор не с первой строки, а например с 5000-чной и до конца.

5

Re: VBScript: перебор строк на совпадение

очена надамана нидхелп, гуру

mfgroup, читаем §3.3, затем свои сообщения. Думаем.

Если Вы не начнёте впредь использовать знаки препинания, заглавные буквы и правила русского языка — мне проще будет закрыть тему, нежели научить Вас пользовать хотя бы Word или OO Write для проверки, коль сами не умеете.