Сопоставление файлов txt

Sekotka

Client
Регистрация
07.10.2015
Сообщения
36
Благодарностей
14
Баллы
8
Подскажите пожалуйста, есть два файла txt с построчным расположением УРЛов
В одном допустим 1000 полных УРЛов вида:
http://site1.ru/forum
http://site2.ru/board.php
http://site3.ru/
http://site4.ru/all
А во втором 100 кратких УРЛов вида:
site1.ru
site4.ru
и тд.
Нужно получить из первого файла 100 полных УРЛов, которые совпадают по домену со вторым файлом.
т.е. в моем примере нужно получить готовый список в котором будет только
http://site1.ru/forum
http://site4.ru/all
и все
Подскажите пожалуйста как это реализуется. Спасибо!
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
Берёте из второго списка строку, ищете её в первом, записываете то, что нашли в третий. В итоге в третьем списке будет всё то, что нужно.
 

Sekotka

Client
Регистрация
07.10.2015
Сообщения
36
Благодарностей
14
Баллы
8
Этот вопрос актуален потому, что нужно обрабатывать тысячи УРЛов, а Ваше решение, к сожалению, подразумевает слишком большие затраты времени.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
Это можно сделать кодом. Это всё сделается за секунду. Ничего чрезвычайно сложного тут нет, если Вам не нужно обрабатывать миллионы строк.
 

Sekotka

Client
Регистрация
07.10.2015
Сообщения
36
Благодарностей
14
Баллы
8
К сожалению, я не кодер) Думал может эксель тут поможет или регулярка какая более-менее экономящая время)
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113
К сожалению, я не кодер) Думал может эксель тут поможет или регулярка какая более-менее экономящая время)
Код:
var list1= project.Lists["list1"]; //список, содержащий полные ссылки
var list2= project.Lists["list2"]; //список, содержащий части ссылок
var list3= project.Lists["list3"]; //список, куда сохраняем

int countList1 = list1.Count;
int countList2 = list2.Count;

string shortlink;
string link;

for(int i = 0;i<countList2;i++)
{
    shortlink = list2[i];
    for(int a = 0; a<countList1;a++)
    {
        link = list1[a];
        if(link.Contains(shortlink))
        {
            list3.Add(link);
            break;
        }
    }
}
В первом списке было более 13 к строк, во втором более 1к, выполнилось быстрее, чем за секунду.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 307
Благодарностей
5 865
Баллы
113

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 881
Баллы
113

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 307
Благодарностей
5 865
Баллы
113

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 768
Благодарностей
2 415
Баллы
113
Если есть нужда обрабатывать тысячи строк то наверно более удобно будет работать через базу данных например MySQL (все сравнения база данных возьмет на себя).
Нужно будет просто использовать запрос в виде: SELECT id FROM Table WHERE full_url IN ('%url%', '%url2%', '%url3%');
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)