Java, program porównujący dwa pliki.

0

Witam, mam napisać program, porównujący dwa pliki tekstowe
np. plik 1 plik 2
to jest linia 1 to tez linia 1
to jest koniec tutaj linia 2
to jest koniec.
program ma wyświetlac którymi słowami się różnią(jest/też) oraz wypisywac dodatkowe linie

niestety nie mam pomysłu w jaki sposób porównac ze sobą niewymiarowe tablice
jest ktoś kto mógłby pomóc, coś doradzic?

do tej pory udało mi sie napisac:

package diff;

import java.io.*;
import java.util.Arrays;

public class DIFF {

    public static void main(String[] args) throws IOException {

        String plik1 = "C:01.txt";
        String plik2 = "C:02.txt";

        odczyt(plik1, plik2);

    }

    static void odczyt(String plik1, String plik2) throws IOException {

        // odczyt wiersz po wierszu
        BufferedReader plikwe1 = null;
        BufferedReader plikwe2 = null;

        try {

            plikwe1 = new BufferedReader(new FileReader(plik1));
            plikwe2 = new BufferedReader(new FileReader(plik2));
            int ileliniip1 = 0;
            int ileliniip2 = 0;
            // czyanie pliku 1 i 2 + ile linii maja
            while ((plikwe1.readLine()) != null) {
                ileliniip1++;
            }
            while ((plikwe2.readLine()) != null) {
                ileliniip2++;
            }
            System.out.println("Tekst pierwszy ma " + ileliniip1 + ", a tekst drugi ma " + ileliniip2 + " lini ");
            // wsadzic do tablic
            String p1, p2;

            String[] tabtekst1 = null;
            String[] tabtekst2 = null;
            plikwe1 = new BufferedReader(new FileReader(plik1));
            plikwe2 = new BufferedReader(new FileReader(plik2));

            // czyanie pliku 1 i 2 + ile linii maja
            /*while ((p1=plikwe1.readLine()) != null) {
             tabtekst1=p1.split(" ");
             System.out.println(Arrays.toString(tabtekst1));
             }
             while ((p2=plikwe2.readLine()) != null) {
             tabtekst2=p2.split(" ");
             System.out.println(Arrays.toString(tabtekst2));
             }*/
            for (int i = 0; i < ileliniip1; i++) {
                for (int j = 0; j < ileliniip2; j++) {

                    if ((p1 = plikwe1.readLine()) != null) {
                        tabtekst1 = p1.split(" ");
                        //  System.out.println(Arrays.toString(tabtekst1));
                    }
                    if ((p2 = plikwe2.readLine()) != null) {
                        tabtekst2 = p2.split(" ");
                        //  System.out.println(Arrays.toString(tabtekst2));
                    }
                    for (int a = 0; a < tabtekst1.length; a++) {
                        for (int b = 0; b < tabtekst2.length; b++) {
                            if (tabtekst1[a].equals(tabtekst2[a])) {
                                System.out.println("słowo -" + tabtekst1[a] + "- jest identyczne");

                            }
                            if (!(tabtekst1[a].equals(tabtekst2[b]))) {
                                System.out.println(tabtekst1[a]);
                            }
          // if(tabtekst1[i]!=tabtekst2[j])
                            // {  System.out.println("linia"+i+"nie jest identyczna");
                            //  }
                        }
                    }

                    if ((p2 = plikwe2.readLine()) == null && (p2 = plikwe2.readLine()) == null) {
                        break;
                    }

                }
            }

        } finally {
            if (plikwe1 != null) {
                plikwe1.close();
            }
            if (plikwe2 != null) {
                plikwe2.close();
            }
        }
    }

}

}
0

Możesz to zrobić jak tylko zapragniesz. Tak na szybko to możesz wczytywać po linijce z plików. Porozdzielać je na słowa które powkładasz do tablic a potem te tablice porównasz.

0

. plik 1 plik 2
to jest linia 1 to tez linia 1
to jest koniec tutaj linia 2
to jest koniec.
program ma wyświetlac którymi słowami się różnią(jest/też) oraz wypisywac dodatkowe linie

0

No to wpakuj każdą linię do tablicy i idąc po tych liniach dla każdej z pierwszego pliku sprawdzasz każdą z drugiego ale przechodząc po słowach. Jeśli wszystkie podobne to są takie same, jeśli chociaż jedno ale nie wszystkie, to podobne i wypisujesz te które jest/są różnicą, jeśli żadne nie pasuje to znaczy, że linia jest dodatkowa.

0

dziękuje:) może uda mi się to dokończyć ;)

0

A do jakiej szkoły to zadanie masz zrobić? O ile dobrze zrozumiałem treść, to sprawa nie jest taka prosta. To jest ogólnie znany i rozwiązany problem, zajrzyj tutaj: http://pl.wikipedia.org/wiki/Najd%C5%82u%C5%BCszy_wsp%C3%B3lny_podci%C4%85g
Rozwiązanie masz gotowe, ale nie jest oczywiste w implementacji.
Chyba, że są jakieś dodatkowe warunki, które to upraszczają, np. tylko porównanie czy linie są identyczne na tych samych pozycjach.

0
package diff;

import java.io.*;
//import java.util.Arrays;

public class DIFF {

    public static void main(String[] args) throws IOException {

        String plik1 = "C:\\plik01.txt";
        String plik2 = "C:\\plik02.txt";

        odczyt(plik1, plik2);

    }

    static void odczyt(String plik1, String plik2) throws IOException {

        // odczyt wiersz po wierszu
        BufferedReader plikwe1 = null;
        BufferedReader plikwe2 = null;
FileWriter plik3 = null;
        try {

            plikwe1 = new BufferedReader(new FileReader(plik1));
            plikwe2 = new BufferedReader(new FileReader(plik2));
          plik3 = new FileWriter("C:\\plik3.txt");
            int ileliniip1 = 0;
            int ileliniip2 = 0;
            // czyanie pliku 1 i 2 + ile linii maja
            while ((plikwe1.readLine()) != null) {
                ileliniip1++;
            }
            while ((plikwe2.readLine()) != null) {
                ileliniip2++;
            }
            System.out.println("Tekst pierwszy ma " + ileliniip1 + ", a tekst drugi ma " + ileliniip2 + " lini ");
            // wsadzic do tablic
            String p1, p2;

            String[] tabtekst1 = null;
            String[] tabtekst2 = null;
            plikwe1 = new BufferedReader(new FileReader(plik1));
            plikwe2 = new BufferedReader(new FileReader(plik2));
            
            
            // czyanie pliku 1 i 2 + ile linii maja
            /*while ((p1=plikwe1.readLine()) != null) {
             tabtekst1=p1.split(" ");
             System.out.println(Arrays.toString(tabtekst1));
             }
             while ((p2=plikwe2.readLine()) != null) {
             tabtekst2=p2.split(" ");
             System.out.println(Arrays.toString(tabtekst2));
             }*/
            // for (int i = 0; i < ileliniip1; i++) {
            for (int j = 1; j <= ileliniip1; j++) {

                // if ((p1 = plikwe1.readLine()) != null) {
                tabtekst1 = plikwe1.readLine().split(" ");
                //  System.out.println(Arrays.toString(tabtekst1));
            }
            for (int i = 1; i <= ileliniip2; i++) {
String roznice1=" ";
String roznice2=" ";
                //p2 = plikwe2.readLine();
                tabtekst2 = plikwe2.readLine().split(" ");
                int a=0;
                for (a=0; a < tabtekst2.length; a++) {
                    //if(tabtekst1[a].equals(tabtekst2[a]))
                    //{
                    //System.out.println(tabtekst2[a].toString());
                    // }
                    if (!(tabtekst1[a].equals(tabtekst2[a]))) {
                        roznice1=roznice1+" "+tabtekst1[a].toString();
                        roznice2=roznice2+" "+tabtekst2[a].toString();
                    }
               }
                System.out.println(roznice1 + " / " + roznice2+ "|| linia " + i );
                
       
           
           // String zapis = "";
            plik3.write(roznice1 + " / " + roznice2+ "|| linia " + i);
       
           
        
                //  System.out.println(Arrays.toString(tabtekst2));
            }
            
            

        } finally {
            if (plikwe1 != null) {
                plikwe1.close();
            }
            if (plikwe2 != null) {
                plikwe2.close();
            }
             if (plik3 != null) {
                plik3.close();
            }
        }
    }

}
```java




Tutaj się poddałam:(

1 użytkowników online, w tym zalogowanych: 0, gości: 1