1 / 1 / 0
Регистрация: 24.10.2018
Сообщений: 43

Утилита сравнения файлов

27.03.2019, 13:07. Показов 2831. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача из книги Шилдта для начинающих. В книге есть пример утилиты, и затем задание:
1. Предусмотреть возможность выполнения сравнения без учета регистра символов.
2. Доработать программу так, чтобы она выводила номер позиции, в которой находиться первая пара отличающихся символов.
При вызове этой программы следует указать имена сравниваемых файлов. java CompFiles file1.txt file2.txt
Оригинал из книги.

Java
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
import java.io.*;
 
class CompFiles {
    public static void main(String args[]) {
        
        int i = 0, j = 0;
        
        if (args.length != 2) { // проверка ввода имен файов
            System.out.println("Usage : CompFiles file1 file2");
            return;
        }
        
        try (FileInputStream f1 = new FileInputStream(args[0]);
            FileInputStream f2 = new FileInputStream(args[1])) {
                do {
                    i = f1.read();
                    j = f2.read();
                    if (i != j) break;
                } while (i != -1 && j != -1);
                
                if (i != j)
                    System.out.println("File content are different");
                else
                    System.out.println("File content are same");
            } catch (IOException exc){
            System.out.println("Input - output error" + exc);           
        }
    }
}
Чтобы выводить номер позиции где не совпадают символы, я добавил в цикл переменную count, которая инкрементируеться с циклом и выводиться при i != j.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try (FileInputStream f1 = new FileInputStream(args[0]);
            FileInputStream f2 = new FileInputStream(args[1])) {
                do {
                    i = f1.read();
                    j = f2.read();                                      
                    count++; 
                    if (i != j) break;  
                } while (i != -1 && j != -1);
                                                
                if (i != j)
                    System.out.println("Files content are different" +
                    "\nPosition of elements which do not match is # " + count);             
                else
                    System.out.println("Files content are the same");
            } catch (IOException exc){
            System.out.println("Input - output error" + exc);           
        }
Но не могу понять, как быть с регистром. Так как разница между английскими символами верхнего и нижнего регистра 32,
думал добавить условие для проверки типа:

Java
1
(((char)(i + 32)) | ((char) (j + 32)))
И вставить в if (i != j).Но оно не зашло, где то в нем ошибка, и вообще какой то позор.
Буду благодарен за подсказки.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2019, 13:07
Ответы с готовыми решениями:

Утилита проверки целостности файлов и поиска дубликатов
Пишу корсовой на тему проверки целостности файлов и поиска дубликатов. Думаю, что буду использовать формирование контрольных сумм с помощью...

Программа сравнения файлов
Скажите пожалуйста: почему, когда я нажимаю на кнопку Compare у меня возникает ошибка? IDE - Eclipse Файлы добавляю как обычно: ...

Утилита выводит каталог файлов с подробной информацией
Утилита выводящая список файлов в заданном каталоге с подробной информацией по каждому из них. (Прошу помощи!!!)

3
 Аватар для sash23
561 / 408 / 259
Регистрация: 31.05.2016
Сообщений: 1,102
27.03.2019, 13:30
Лучший ответ Сообщение было отмечено Jgal как решение

Решение

А если к одному регистру привести с помощью функции ?https://docs.oracle.com/javase... erCase(int)

Character.toUpperCase(i)
0
1 / 1 / 0
Регистрация: 24.10.2018
Сообщений: 43
27.03.2019, 14:33  [ТС]
Я пробовал, не получилось. Пробую переделать.

Добавлено через 55 минут
sash23 спасибо. Заработало.

Java
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
import java.io.*;
 
class MyCompFiles {
    public static void main(String args[]) {
        
        int i = 0, j = 0;
        int count = 0;  
        char chI, chJ;
        
        if (args.length != 2) { // проверка ввода имен файов
            System.out.println("Usage : CompFiles file1 file2");
            return;
        }
        
        try (FileInputStream f1 = new FileInputStream(args[0]);
            FileInputStream f2 = new FileInputStream(args[1])) {
                do {
                    i = f1.read();
                    j = f2.read();                              
                    chI = (char) i;
                    chJ = (char) j;
                    count++; 
                    if (i != j | Character.toUpperCase(chI) == Character.toUpperCase(chJ)) break;   
                } while (i != -1 && j != -1);
                if (i != j)
                    System.out.println("Files content are different" +
                    "\nPosition of elements which do not match is # " + count);             
                else
                    System.out.println("Files content are the same");
            } catch (IOException exc){
            System.out.println("Input - output error" + exc);           
        }       
    }
}
0
0 / 0 / 0
Регистрация: 29.12.2019
Сообщений: 1
29.12.2019, 18:20
Java
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
import java.io.*;
 
class CompFiles {
  public static void main(String args[])
  {
    int i=0, j=0;
 
    // First make sure that both files have been specified.
    if(args.length !=2 ) {
      System.out.println("Usage: CompFiles f1 f2");
      return;
    }
 
    // Compare the files.
    try (FileInputStream f1 = new FileInputStream(args[0]);
            FileInputStream f2 = new FileInputStream(args[1])) {
            int count=0;        
        do {
                    i = f1.read();
                    j = f2.read();                                      
                    count++; 
                    if (i != j & (char) i+32==j & (char) j+32==i) break;  
                } while (i != -1 && j != -1);
                                                
                if (i != j)
                    System.out.println("Files content are different" +
                    "\nPosition of elements which do not match is # " + count);             
                else
                    System.out.println("Files content are the same");
            } catch (IOException exc){
            System.out.println("Input - output error" + exc);
    }
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2019, 18:20
Помогаю со студенческими работами здесь

Есть ли готовая утилита для копирования файлов на CD?
Hi, ALL! Посетила меня такая мысль. Иногда, по желанию юзеров приходится делать копии их файлов на CD. Файлов много, мест их положения...

Сравнения файлов Excel
Есть программа которая сравнивает два файла private void button1_Click(object sender, EventArgs e) { ...

Приложение для сравнения файлов
Нужна прога которой можно выбирать любой файл с компа и можно было бы сравнить несколько файлов и сколько они весят

Быстрый способ сравнения файлов
На одном форуме прочел коммент пользователя: Как реализовать чтение по кластерам и сравнение в памяти? Сравнение по байтам, по хэшу...

Программа сравнения звуковых файлов
Есть 2 звуковых файла с расширением pcm в формате моно 16 бит. Требуется сравнить эти два файла и разницу между ними записать в третий...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Интеграция Hangfire с RabbitMQ в проектах C#.NET
stackOverflow 18.04.2025
Разработка современных . NET-приложений часто требует выполнения задач "за кулисами". Это может быть отправка email-уведомлений, генерация отчётов, обработка загруженных файлов или синхронизация. . .
Построение эффективных запросов в микросервисной архитектуре: Стратегии и практики
ArchitectMsa 18.04.2025
Микросервисная архитектура принесла с собой много преимуществ — возможность независимого масштабирования сервисов, технологическую гибкость и четкое разграничение ответственности. Но как часто бывает. . .
Префабы в Unity: Использование, хранение, управление
GameUnited 18.04.2025
Префабы — один из краеугольных элементов разработки игр в Unity, представляющий собой шаблоны объектов, которые можно многократно использовать в различных сценах. Они позволяют создавать составные. . .
RabbitMQ как шина данных в интеграционных решениях на C# (с MassTransit)
stackOverflow 18.04.2025
Современный бизнес опирается на множество специализированных программных систем, каждая из которых заточена под решение конкретных задач. CRM управляет отношениями с клиентами, ERP контролирует. . .
Типы в TypeScript
run.dev 18.04.2025
TypeScript представляет собой мощное расширение JavaScript, которое добавляет статическую типизацию в этот динамический язык. В JavaScript, где переменная может свободно менять тип в процессе. . .
Погружение в Kafka: Концепции и примеры на C# с ASP.NET Core
stackOverflow 18.04.2025
Apache Kafka изменила подход к обработке данных в распределенных системах. Эта платформа потоковой передачи данных выходит далеко за рамки обычной шины сообщений, предлагая мощные возможности,. . .
Коммуникация в реальном времени с SignalR в C# на примере создания чата
UnmanagedCoder 17.04.2025
Современный веб стремительно эволюционирует от статичных страниц к динамичным приложениям, где пользователи ожидают мгновенной реакции на свои действия. Представим, что вы отправляете сообщение. . .
Реализация CQRS с MediatR на C# .NET
stackOverflow 17.04.2025
Современная разработка программного обеспечения постоянно ищет пути повышения эффективности организации кода. Архитектурные паттерны появляются, эволюционируют, и те, что проявляют свою. . .
Verilog и интеллектуальная собственность - "глазами" обученной LM модели.
Hrethgir 17.04.2025
В сети встречаются участники, заявляющие что код на Verilog ни о чём не говорит. Но вот патентная практика на самом деле показывает обратное ими утверждаемому. То-есть код на Verilog включают в. . .
Свап-файл дополнительно к разделу (если вдруг не хватает или не создан)
jigi33 17.04.2025
ПОДКЛЮЧЕНИЕ ДОПОЛНИТЕЛЬНОГО SWAP ПРОСТРАНСТВА, Т. О. , РАСШИРЕНИЕ ЕГО РАЗМЕРА В Linux можно использовать как раздел подкачки (swap), так и файл подкачки (swap-файл). Чтобы создать swap-файл вместо. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru