Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/35: Рейтинг темы: голосов - 35, средняя оценка - 4.83
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712

Сравнение содержимого файлов

03.03.2010, 09:50. Показов 7402. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мини-задача состоит в следующем необходимо найти в одном (А) файле содержимое второго (В).
Так вот хотелось бы получить совет как реализовать сие процесс?

Если содержимое файла В находится в начале файла А, то это реализовать не сложно, а вот если в середине, то начинаются небольшие затруднения
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2010, 09:50
Ответы с готовыми решениями:

Сравнение содержимого файлов на сервере и ПК
Ребят имеется код,который читает содержимое файла в интернете x.txt и содержимое файла x.txt на компе, если их содержимое одинаково, то он...

Сравнение содержимого каталогов
В задаче сказано: "написать программу для сравнения содержимого каталогов" Подсказали что нужно использовать find first,find next. Так...

Сравнение содержимого указателей
В строке while ( helpspec -> namespec != temp -> namespec ){…} выражение ( helpspec -> namespec != temp -> namespec ) дает...

7
 Аватар для Sekt
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
03.03.2010, 10:29
C
1
2
3
4
5
6
do {
fgets(str1[i],F1);
fgets(str[j],F2);
if(str1[i]==str2[j])std::cout<<"sovpadaet";
i++;j++;
}while(F2 != eof) // или как там ;)
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
03.03.2010, 10:46
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define A_NAME "a.txt"
#define B_NAME "b.txt"
 
int main(void){
    long a_size, b_size;
    char *a_buf, *b_buf;
    FILE *a, *b;
    
    if ( ( a = fopen(A_NAME, "rb") ) == NULL ){
        fprintf(stderr, "Can't open file: %s\n", A_NAME);
        exit(1);
    }
    fseek(a, 0, SEEK_END);
    a_size = ftell(a);
    if ( !a_size ){
        fprintf(stderr, "File %s is empty!\n", A_NAME);
        exit(1);
    }
    rewind(a);
    
    if ( ( a_buf = (char*)malloc(a_size + 1) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    if ( fread(a_buf, sizeof(char), a_size, a) != a_size ){
        fprintf(stderr, "Can't read file: %s\n", A_NAME);
        exit(1);
    }
    a_buf[a_size] = 0;
    fclose(a);
    
    if ( ( b = fopen(B_NAME, "rb") ) == NULL ){
        fprintf(stderr, "Can't open file: %s\n", B_NAME);
        exit(1);
    }
    fseek(b, 0, SEEK_END);
    b_size = ftell(b);
    if ( !b_size ){
        fprintf(stderr, "File %s is empty!\n", B_NAME);
        exit(1);
    }
    rewind(b);
    
    if ( ( b_buf = (char*)malloc(b_size + 1) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    if ( fread(b_buf, sizeof(char), b_size, b) != b_size ){
        fprintf(stderr, "Can't read file: %s\n", B_NAME);
        exit(1);
    }
    b_buf[b_size] = 0;
    fclose(b);
    
    printf("File %s %scontain file %s\n", A_NAME, ( strstr(a_buf, b_buf) ) ? "" : "don't ", B_NAME);
    
    free(a_buf);
    free(b_buf);
    exit(0);
}
1
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
03.03.2010, 10:48  [ТС]
Цитата Сообщение от Sekt Посмотреть сообщение
C
1
2
3
4
5
6
do {
fgets(str1[i],F1);
fgets(str[j],F2);
if(str1[i]==str2[j])std::cout<<"sovpadaet";
i++;j++;
}while(F2 != eof) // или как там ;)
а если F2 по размеру меньше, чем F1?
str2 и str1 это массивы указателей на char... и какого они размера?
вся загвоздка в том, что в начале не известно размеров файлов, файлы могут быть любого размера, и кол-во строк содержащихся в них тоже не известно.

to easybudda:
хороший код, но два файла запихиваются в память... это есть не хорошо. всё равно идея хорошая.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
03.03.2010, 11:32
Цитата Сообщение от kuroiryuu Посмотреть сообщение
но два файла запихиваются в память... это есть не хорошо.
Учитывая отношение размера среднего текстового файла к объёму памяти более-менее современного компьютера это, наверное, не существенно... Но в любом случае второй файл целиком считать прийдётся. После чего установить указатель на начало буфера со вторым файлом, читать по символу из первого файла, пока символы совпадают с символами в буфере, продвигать указатель по буферу. Если буфер закончился - второй файл нашёлся в первом, если очередной считанный символ не совпал с очередным символом в буфере - установить указатель на начало буфера, сравнивать/читать дальше... Можно, конечно, и из второго файла по символу читать, а не сразу все, но как-то мрачно получится... В том плане, что работать будет медленно...
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
03.03.2010, 13:30
Для начала можно сравнить размеры файлов.
Если совпали, то читать кусками в два буфера определенного размера, например, килобайт по 16, и сравнивать их ...

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
    
    // sz_a, sz_b - размеры файлов
    // szBuffer   - размер буфера
    
    // Сравнение содержимого
    size_t amount = sz_a / szBuffer, bmount = sz_a % szBuffer; 
    UCHAR abuf[szBuffer], bbuf[szBuffer];   // буферы
    for(size_t i = 0; i < amount; i++)
    {
        fread(abuf, sizeof(UCHAR), szBuffer, file_a);
        fread(bbuf, sizeof(UCHAR), szBuffer, file_b);
        if(memcpy(abuf, bbuf, sizeof(UCHAR) * szBuffer) != 0)
        {
            cout << "Файлы не равны" << endl;
            return 0;
        }
    }
    if(bmount != 0)
    {
        fread(abuf, sizeof(UCHAR), bmount, file_a);
        fread(bbuf, sizeof(UCHAR), bmount, file_b);
        if(memcpy(abuf, bbuf, sizeof(UCHAR) * bmount) != 0)
        {
            cout << "Файлы не равны" << endl;
        }
    }
0
0 / 0 / 0
Регистрация: 18.06.2009
Сообщений: 23
03.03.2010, 13:46
а если в лоб как сроки нам же надо полное включение.=> создаем таблицу символов для включаемого файла закрываем проверяем второй и выводим номер символа с которого начинается в клячение. название метода поиска не помну а подруге делал у нее описание в лекциях было код только малость длинный получился. исходника нет но если идея понравилась могу написать заного.

Добавлено через 1 минуту
посмотри алгоритмы сравнения сток за первый 1 курс
0
 Аватар для kuroiryuu
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
03.03.2010, 16:12  [ТС]
Всем спасибо!
Но всё у меня свелось к занесению файла В в память в виде 2D массива.
Потом происходило построчное чтение из файла А и если массив находится в файле, то хорошо, если же нет - ещё лучше.
При каждом совпадении строки файла и массива увеличивался счётчик, и если счётчик становится равный количеству строк - УРА! - значит такой кусок есть в файле.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2010, 16:12
Помогаю со студенческими работами здесь

Сравнение файлов C++ .cpp и .h по средствам представления .cs файлов в C#
Доброго времени суток. Я немало времени потратил на C#. Сейчас изучаю литературу по С++ и не могу понять не из одной из публикаций как...

Сравнение содержимого двух файлов
Ребята , как мне сделать проверку файлов ! так вот у меня имеется папка соченения.. С:\соченения\ В ней 3 файла : 1.txt 2.txt...

Сравнение содержимого двух файлов
Какой командой можно сравнить содержимое двух файлов и вывести результат в другой файл. Comp и FC не получается. Возможно нужен какой-то...

Сравнение содержимого набора файлов
Есть файлы sp1.* (01-23) и sp2.* (01-23). В них находятся наборы из 6 цифр: 113548 328465 257710 и так далее... Записи...

Сравнение содержимого набора текстовых файлов
Уважаемые знатоки, не откажите в помощи новичку! Задача такова - необходимо взять много *.c;*.h (находятся в разных каталогах, есть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru