Привет!
Да, я переворошил Гугл и ваш поиск и не нашел... собсно, проблема заключается в следующем. Объясняю на пальцах. Есть два довольно больших файла (скажем, *.txt), в которых есть строки, разделенные переносом, например:
ФАЙЛ 1:
k09ykj0e4j6yo25
98bgjh40j3g0jg0936
29th9857u056
92387469hrtoiegj
98r7t98q4utoq3t
jrth098jeo546y3
8sg75h
...
ФАЙЛ 2:
dg98j405t205
92387469hrtoiegj
js9g845j923tj0y45y
jh9dr58jy0w5
k09ykj0e4j6yo25
rst8eu45t95
49t8j5
...
Напомню, перенос - это у нас 0x0D 0x0A. Требуется программа, желательно быстрая, которая бы нашла одинаков(ую/ые) строк(у/и) вне зависимости от того, где они находятся. Т.е. результатом работы был бы файлик со следующим содержанием:
k09ykj0e4j6yo25
92387469hrtoiegj
...
Написал простейшую прогу, использующую простейшую идею и стандартные токены:
прога последовательно расчленяет первый массив на токены (строки) и текущую строку сравнивает со вторым массивом. Использую стандартные strtok и strtok, но она работает крайне медленно и файлы размером всего по 10Мб обрабатывает примерно за полчаса (! а требуется, ну пусть за сутки, но обработать два стомегобайтных файла).
Подскажите плиз что еще пригодно для этих целей! Рассмотрю любые средства, если надо напишу конфертер если форматы будут разницца. Заранее спасибо.
Да, я переворошил Гугл и ваш поиск и не нашел... собсно, проблема заключается в следующем. Объясняю на пальцах. Есть два довольно больших файла (скажем, *.txt), в которых есть строки, разделенные переносом, например:
ФАЙЛ 1:
k09ykj0e4j6yo25
98bgjh40j3g0jg0936
29th9857u056
92387469hrtoiegj
98r7t98q4utoq3t
jrth098jeo546y3
8sg75h
...
ФАЙЛ 2:
dg98j405t205
92387469hrtoiegj
js9g845j923tj0y45y
jh9dr58jy0w5
k09ykj0e4j6yo25
rst8eu45t95
49t8j5
...
Напомню, перенос - это у нас 0x0D 0x0A. Требуется программа, желательно быстрая, которая бы нашла одинаков(ую/ые) строк(у/и) вне зависимости от того, где они находятся. Т.е. результатом работы был бы файлик со следующим содержанием:
k09ykj0e4j6yo25
92387469hrtoiegj
...
Написал простейшую прогу, использующую простейшую идею и стандартные токены:
01 | BYTE file1[64], file2[64]; |
02 | BYTE limit[] = {0x0D, 0x0A, 0x00}; |
03 | char * token; |
04 | char * _token; |
05 | DWORD filesize1, filesize2; |
06 | DWORD otmazka; |
07 | DWORD vsego = 0; |
08 | BYTE * pbuffer1, * pbuffer2; |
09 | BYTE * pbuffer; |
10 | HANDLE F1, F2; |
11 | FILE * output; |
12 |
13 | printf( "input first filename:" ); |
14 | scanf( "%s" ,&file1); |
15 | printf( "input second filename:" ); |
16 | scanf( "%s" ,&file2); |
17 | F1 = CreateFile((LPCTSTR)file1,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); |
18 | F2 = CreateFile((LPCTSTR)file2,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); |
19 | filesize1 = GetFileSize(F1,0); |
20 | filesize2 = GetFileSize(F2,0); |
21 | pbuffer = new BYTE[filesize1+1]; |
22 | pbuffer1 = new BYTE[filesize1+1]; |
23 | pbuffer2 = new BYTE[filesize2+1]; |
24 | ReadFile(F1,pbuffer1,filesize1,&otmazka,0); |
25 | ReadFile(F2,pbuffer2,filesize2,&otmazka,0); |
26 | pbuffer1[filesize1]=0x00; |
27 | pbuffer2[filesize2]=0x00; |
28 | CloseHandle(F1); |
29 | CloseHandle(F2); |
30 | memcpy(pbuffer,pbuffer1,filesize1); |
31 | _token = strtok ((char *)pbuffer,( const char *)limit); |
32 | while (_token != NULL) |
33 | { |
34 | _token = strtok (NULL,( const char *)limit); |
35 | vsego++; |
36 | } |
37 | otmazka = 0; |
38 | output = fopen ( "out.txt" , "w+" ); |
39 | token = strtok ((char *)pbuffer1,( const char *)limit); |
40 | while (token != NULL) |
41 | { |
42 | otmazka++; |
43 | printf( "\r%i of %i" ,otmazka,vsego); |
44 | if ( strstr (( const char *)pbuffer2,token) != NULL) |
45 | { |
46 | fprintf (output, "%s\n" ,token); |
47 | printf( "\n--> %s <--\n" ,token); |
48 | } |
49 | token = strtok (NULL,( const char *)limit); |
50 | } |
51 | fclose(output); |
52 | delete [] pbuffer1; |
53 | delete [] pbuffer2; |
прога последовательно расчленяет первый массив на токены (строки) и текущую строку сравнивает со вторым массивом. Использую стандартные strtok и strtok, но она работает крайне медленно и файлы размером всего по 10Мб обрабатывает примерно за полчаса (! а требуется, ну пусть за сутки, но обработать два стомегобайтных файла).
Подскажите плиз что еще пригодно для этих целей! Рассмотрю любые средства, если надо напишу конфертер если форматы будут разницца. Заранее спасибо.