Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 15

Нужен скрипт, чтобы проверить email на схожесть

09.04.2015, 15:15. Показов 1506. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. Создаю тему в данном разделе, поскольку мой вопрос можно отнести к разным языкам как думаю.
Задача проста, но для несведущего в программировании сложна.
Есть база данных email, база большая, несколько десятков тысяч. Так вот попадаются порой схожие email, например:
c.h.e.a.po.akl.e.y.s.ou.t.l.et.au@gmail.com
c.hea.poa.kleysu.nglass.esa.us.ale@gmail.com
chea.poakley.su.n.g.la.sses.au.s.ale@gmail.com
chea.poa.kley.sungl.assesa.u.sal.e@gmail.com

Суть в том, что до @ порядок и количество букв одинаковое, только вот расположение точек разное. Нужно убрать такие email. Можно проверять на схожесть конечно на сайтах подобных, но там строку со строкой только, поодиночке. Возможно ли как то реализовать скрипт, который бы проверял по строкам, где по одному email, или что удобней таблицу, саму с собой для выявления и удаления таких email? Буду очень благодарен в помощи. Если есть наметки, или уже видели подобное где-то, или знаете и это довольно просто, прошу помочь.
Требовать готовый код, особенно если он трудоемкий даже не думал. С уважением, Дмитрий.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2015, 15:15
Ответы с готовыми решениями:

Нужен скрипт, который c правами админа в профилях пользователей автоматически собирает их email-ы
Здравствуйте. Нужен специальный скрипт. Работа скрипта должна проходить на форуме. Форум на движке vBulletin. Скрипт должен заходить в...

Проверить на схожесть записи
Добрый день всем!! помогите разобраться как проверить в базе есть ли уже создана запись на такое число и на такое время что бы когда...

Какой нужен код, чтобы проверить выбран ли элемент в ComboBox?
Какой нужен код, чтобы проверить выбран ли элемент в comboboxe? , допустим, если элемент не выбран, то кнопка отключена, а если элемент...

2
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
09.04.2015, 16:19
Если по памяти ограничений нет (речь о нескольких десятках мегабайт), то просто читать все адреса в std::set. Только set'у подсунуть компаратор, который будет сравнивать адреса, предварительно удалив оттуда все точки до символа @. В итоге получим множество уникальных адресов, которое можно сбросить в файл.
Но С++ не самый удачный выбор, проще может на питоне это сделать)
0
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
11.04.2015, 09:56
Лучший ответ Сообщение было отмечено KeyDiWeb как решение

Решение

Ну, вот, наверное, как-то так. Я думаю, на С++ будет всё-таки быстрее, чем на питоне. Сравнивать "вручную" я тоже решил ради скорости, чтобы не было лишних копирований. Конечно же, компилировать стоит с максимальной опитимизацией.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
 
using namespace std;
    
/* функтор */
struct compare_without_dots {
    bool operator ()(const string &s1, const string &s2) {
        for (auto p1 = begin(s1), p2 = begin(s2); p1 != end(s1) and p2 != end(s2); p1++, p2++) {
            if (*p1 == '.' and p1+1 != end(s1)) p1++;
            if (*p2 == '.' and p2+1 != end(s2)) p2++;
            if (*p1 != *p2) return *p1 < *p2;
        }
        return false;
    }
};
 
int main() {
    string file_name;
    cout << "Введите имя файла с базой данных: ";
    getline(cin, file_name);
    ifstream in_file(file_name);
    cout << "Введите имя файла для результата: ";
    getline(cin, file_name);
    ofstream out_file(file_name);
 
    set<string, compare_without_dots> database;
    while (in_file) {
        string email;
        getline(in_file, email);
        database.insert(email);
    }
 
    copy(begin(database), end(database), ostream_iterator<string>(out_file, "\n"));
}

Можно попытаться использовать unordered_map, правда, в результате могут тогда исчезнуть какие-то неповторяющиеся адреса. Тут только надо правильно построить хеш-функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2015, 09:56
Помогаю со студенческими работами здесь

Нужен скрипт, чтобы при установлении флажка в radio удалялись блоки, которые скреплены Id.
Люди, которые пишут тут ответы, вы лучшие! ПОМОГИТЕ, ПОЖАЛУЙСТА. Итак, мне нужен скрипт, чтобы при установлении флажка в radio...

Скрипт сбора email
В общем есть форма: при вводе email нужно отправить на указанный email письмо и указанный email записать в файл на сервер. Как это...

Скрипт отправки данных на email
В чем будет заключаться скрипта отправки данных с формы на электронный ящик? Допустим создали сайт,на нем есть форма для сбора...

Скрипт отправки данных на email
Навеяло отсюда https://www.cyberforum.ru/php-beginners/thread436318.html Я не знаю куда вставлять эти коды? Какие файлы нужно создать? И...

Проверить, является ли строка email
задача: написать программу для проверки является ли строка имейлом. первый вопрос. Какую лучше использовать библиотеку и где достаточно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru