Dateien vergleichen

Sven

Member of Honour
#1
Namd
gesucht wird ein Programm welches:
1) Den Inhalt zweier Dateien gegeneinander vergleicht und die Unterschiede dann, evtl. mit Zeilennummer, ausgibt.
2) Ausgangsdateien sollen jeweils Textbasierende Dateien sein.
3) Das Programm soll unterscheiden können, ob nur eine einzige Zeile geändert wurde, und dadurch der Rest verschoben wurde, oder nicht. Also kein direkter Zeile gegen Zeile vergleich.
4) Die Ausgabe kann wahlweise in einer Datei oder auf dem Bildschirm erfolgen, am besten wählbar.
5) (optional, wer lust laune und/oder Zeit hat) Das ganze mit einer GUI lösen


OS, Sprache, ist wie immer euch überlassen, fragen bitte an mich richten :)
 

Sven

Member of Honour
#5
Es geht mir nur um das was ivegotmail passend in der Beschreibung dieses Forums niedergeschrieben hat:

Die Aufgaben werden meist so gestellt sein, dass sie mit einer beliebigen Programmiersprache gelöst werden können. Das heißt wir programmieren hier keine 3D-Engines, sondern konzentrieren uns eher auf mathematische oder ähnliche Probleme die euer Hirn etwas fordern.
Die Idee zu der Aufgabe kam mir halt als ich demletzt sowas ähnliches gesucht habe. Aber dass es existierende Programme gibt, sollte euch wohl kaum davon ab halten, mal zu versuchen dass ganze auf euere Art und Weise zu lösen, wir betreiben dass ganze nunmal aus reinem Vergnügen.
 
#6
D4T31eN Ch3cK3N -> kL31n1gK31T v0N CypherL0rd

yo leutz nach über zehn jahren wird diese aufgabe nun endlich gelöst!

wollte ein gui und deshalb dies mal wieder in java aber versprochen das nächste kommt wieder in python!

der code kann ein enter finden ansonsten gibt er einfach die gleichen zeilen an, aber wenn alles um ein enter verschobn ist dann findet er es!
Code:
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.util.ArrayList;


public class DateiChecker extends javax.swing.JFrame {
    public static File file1;
    public static File file2;
    public static ArrayList<String> text1;
    public static ArrayList<String> text2;
    
    public void holDatei(int dateinr) {
        JFileChooser txtChooser = new JFileChooser();
        FileFilter filter = new FileNameExtensionFilter("txt", "TXT");
        txtChooser.setFileFilter(filter);
        txtChooser.addActionListener(new ActionListener() {
            @Override public void actionPerformed(ActionEvent e) {
                if(e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {
                    if (dateinr == 1) {
                        file1 = txtChooser.getSelectedFile();
                    } else {
                        file2 = txtChooser.getSelectedFile();
                    }
                } 
            }
        });
        txtChooser.showOpenDialog(null);
    }
    
    public void ladText(int dateinr) throws IOException {
        if (dateinr == 1) {
            text1 = new ArrayList<String>();
            FileInputStream instyleLeserin = new FileInputStream(file1);
            BufferedReader bildZeitungLeserin = new BufferedReader(new InputStreamReader(instyleLeserin));
            String zeile;
            jTextArea1.setEditable(true);
            jTextArea1.setText("");
            while ((zeile = bildZeitungLeserin.readLine()) != null) {
                text1.add(zeile);
                jTextArea1.append(zeile);
                jTextArea1.append("\n");
            }
            jTextArea1.setEditable(false);
        } else {
            text2 = new ArrayList<String>();
            FileInputStream instyleLeserin = new FileInputStream(file2);
            BufferedReader bildZeitungLeserin = new BufferedReader(new InputStreamReader(instyleLeserin));
            String zeile;
            jTextArea2.setEditable(true);
            jTextArea2.setText("");
            while ((zeile = bildZeitungLeserin.readLine()) != null) {
                text2.add(zeile);
                jTextArea2.append(zeile);
                jTextArea2.append("\n");
            }
            jTextArea2.setEditable(false);
        }
    }
    
    public void vergleichJetzt() {
        jTextArea3.setEditable(true);
        jTextArea3.setText("");
        boolean checkenObEnter = true;
        if(text1.equals(text2)) {
            jTextArea3.append("die dateien sind komplett gleich und identisch");
            checkenObEnter = false;
        } else if (text1.size() >= text2.size()){
            for (int i=0; i<text1.size(); i++) {
                String checkDas = text1.get(i);
                for (int j=0; j<text2.size(); j++) {
                    if (checkDas.equals(text2.get(j))) {
                        jTextArea3.append("links zeile nr. " + (i + 1) + " = rechts zeile nr. " + (j + 1) + "\n");
                    }
                }
            }
        } else if (text1.size() < text2.size()){
            for (int i=0; i<text2.size(); i++) {
                String checkDas = text2.get(i);
                for (int j=0; j<text1.size(); j++) {
                    if (checkDas.equals(text1.get(j))) {
                        jTextArea3.append("links zeile nr. " + (j + 1) + " = rechts zeile nr. " + (i + 1) + "\n");
                    }
                }
            }
        }
        if (checkenObEnter == true && text1.size() < text2.size()) {
            int start = 0;
            for (int i=0; i<text1.size(); i++) {            // sucht erste zeile mit unterschied um damit zu arbeiten dann
                if (!text1.get(i).equals(text2.get(i))) {
                    start = (i);
                    break;
                }
            }
            int counterChecktObRestLicheZeilenGleichSinn = 0;
            for (int i=start; i < text1.size(); i++) { 
                if (text1.get(i).equals(text2.get(i + 1))) {
                    counterChecktObRestLicheZeilenGleichSinn++;
                }
                if(counterChecktObRestLicheZeilenGleichSinn >= (text2.size()-(start+1))) {
                    jTextArea3.setText("");
                    jTextArea3.append("zeilen 1 - " + start + " sind identisch\n");
                    jTextArea3.append("In zeile nr. " + (start+1) + " ist ein zusätzlicher enter in rechtem text\n");
                    break;
                }
            }
        } else if (checkenObEnter == true && text1.size() > text2.size()) {
            int start = 0;
            for (int i=0; i<text2.size(); i++) {            // sucht erste zeile mit unterschied um damit zu arbeiten dann
                if (!text2.get(i).equals(text1.get(i))) {
                    start = (i);
                    break;
                }
            }
            int counterChecktObRestLicheZeilenGleichSinn = 0;
            for (int i=start; i < text2.size(); i++) { 
                if (text2.get(i).equals(text1.get(i + 1))) {
                    counterChecktObRestLicheZeilenGleichSinn++;
                }
                if(counterChecktObRestLicheZeilenGleichSinn >= (text1.size()-(start+1))) {
                    jTextArea3.setText("");
                    jTextArea3.append("zeilen 1 - " + start + " sind identisch\n");
                    jTextArea3.append("In zeile nr. " + (start+1) + " ist ein zusätzlicher enter in linkem text\n");
                    break;
                }
            }
        }
        jTextArea3.setEditable(false);
    }
    
    public DateiChecker() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea2 = new javax.swing.JTextArea();
        jLabel1 = new javax.swing.JLabel();
        jButton3 = new javax.swing.JButton();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTextArea3 = new javax.swing.JTextArea();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("D4T31-CH3cK3r by CypherL0rd");
        setResizable(false);

        jButton1.setText("3R5TE D4T31 l4d3n");
        jButton1.setToolTipText("");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jButton2.setText("zW31Te D4T31 l4d3n");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jTextArea2.setEditable(false);
        jTextArea2.setColumns(20);
        jTextArea2.setRows(5);
        jScrollPane2.setViewportView(jTextArea2);

        jLabel1.setText("h13R w3rd3N d1E Un73R5CH13D3 d4NN 4ng3z31gT W3NN M4NN Ch3cK7eN TUT");

        jButton3.setText("CH3cK3N");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jTextArea3.setEditable(false);
        jTextArea3.setColumns(20);
        jTextArea3.setRows(5);
        jScrollPane3.setViewportView(jTextArea3);

        jMenu1.setText("Help");

        jMenuItem1.setText("about");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("need help");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem2);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE)
                    .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jScrollPane3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 557, Short.MAX_VALUE)
                    .addComponent(jScrollPane2)
                    .addComponent(jScrollPane3))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        JOptionPane.showMessageDialog(rootPane, "digga du bist noch nich bereit fuer die szene!");
    }                                          

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if(file1 != null && file2 != null) {
            vergleichJetzt();
        } else {
            JOptionPane.showMessageDialog(rootPane, "digga erstmal musst du datein laden, erst denken dann auf knoepfen rumdruecken...");
        }
    }                                        

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        JOptionPane.showMessageDialog(rootPane, "made by CypherL0rd - die weitergabe von wissen ist die hoechste form des leben \nkontakt via PN");
    }                                          

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            holDatei(1);
            ladText(1);
            
        } catch (IOException exc) {
            exc.printStackTrace();
        }        
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            holDatei(2);
            ladText(2);
            
        } catch (IOException exc) {
            exc.printStackTrace();
        }
    }                                        

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DateiChecker().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextArea jTextArea2;
    private javax.swing.JTextArea jTextArea3;
    // End of variables declaration                   
}
gui: filechooser — imgbb.com

noch ein paar teste von mir zum forführen:

test1: atwork1 — imgbb.com

test2: atwork2 — imgbb.com

texte sind zitaten aus: Hackerethik – Wikipedia

text1:
h4xx0R 3Th1K:
Freier Zugriff auf Computer
Freier Zugriff auf Wissen
Misstrauen gegenüber Autoritäten und Bevorzugung von Dezentralisierung.
Hacker sollten nur nach ihrer Fähigkeit beurteilt werden.
Du kannst Kunst und Schönheit mittels Computer erzeugen
Verbesserung der Welt durch das Verbreiten von Technologien
text2:
h4xx0R 3Th1K:
Freier Zugriff auf Computer
Freier Zugriff auf Wissen
Misstrauen gegenüber Autoritäten und Bevorzugung von Dezentralisierung.

Hacker sollten nur nach ihrer Fähigkeit beurteilt werden.
Du kannst Kunst und Schönheit mittels Computer erzeugen
Verbesserung der Welt durch das Verbreiten von Technologien
text3:
h4xx0R 3Th1K:
Freier Zugriff auf Computer
Freier Zugriff auf Wissen
Misstrauen gegenüber Autoritäten und Bevorzugung von Dezentralisierung.
Hacker sollten nur nach ihrer Fähigkeit oder ihrem aufgebauten Image beurteilt werden.
Du kannst Kunst und Schönheit mittels Computer erzeugen
Verbesserung der Welt durch das Verbreiten von Technologien
CypherL0rd - bei fragen helf ich gern

shalec digga deine aufgabe kommt alls nächstes dran

wie viel likes krieg ich leutz ?? :D
 
Zuletzt bearbeitet:
Oben