Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 8 von 8
  1. Beiträge anzeigen #1 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.378
     
    Milky-Way ist offline

    [Mini-Tool] DiaText

    Release: [Mini-Tool] DiaText


    Ich habe heute Abend ein kleines Programm geschrieben, und vielleicht ist es ja auch für andere nützlich. Da es wirklich nur klein ist, gibt es auch keine ausführliche Erklärung. Da es sich um ein Java-Programm handelt, braucht man dafür Java. Die meisten dürften es bereits installiert haben.

    Zielsetzung: Fehler (Rechtschreibung, Grammatik) in Dialogen finden.

    DiaText liest die OU.CSL (kann man sich z.B. von Redefix erstellen lassen) aus und speichert die Dialogtexte in einer .txt Datei. Den Inhalt der Datei darf sich der Benutzer dann von Hand nach Word (o.ä.) kopieren, um dort automatisch nach Fehlern suchen zu lassen. Ist ein Fehler gefunden, kann man seine Dialoge nach dem alten (fehlerhaften) Text durchsuchen und den Fehler ausbessern.

    Achtung: Descriptions werden von DiaText nicht gespeichert. Die stehen meines Wissens nach auch nicht in der OU.CSL.

    Das Programm ist (hoffentlich) denkbar simpel aufgebaut. Die schnellste Methode ist es, die DiaText.jar in den Cutscene-Ordner zu kopieren, dann muss man den Pfad dorthin nicht mehr auswählen. Ist das Programm fertig, so erscheint eine Meldung und im selben Verzeichnis wurde eine Datei DiaText.txt mit dem gewünschten Inhalt erstellt.

    Ich denke nicht, dass DiaText besonders fehleranfällig ist. Man sollte allerdings wirklich die OU.CSL auswählen und keine andere Datei^^

    Das Programm ist in Java geschrieben. Nachdem ich seit etwa 2 Jahren nichts mehr in Java programmiert habe, ist das hier sicher kein Meisterwerk. Wer sich den Code trotzdem ansehen möchte, findet ihn im Spoiler.
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    import java.io.*;
    
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    
    public class DiaText {
    	
    	/**
    	* @param args
    	*/
    	public static void main(String[] args) throws IOException{
    		
    		// path to OU.CSL
    		String path = "";
    		
    		int opt_dialog = JOptionPane.showOptionDialog(null, "Befindet sich die OU.CSL im selben Verzeichnis?","Verzeichnis",
    		JOptionPane.YES_NO_CANCEL_OPTION,
    		JOptionPane.QUESTION_MESSAGE, null, 
    	new String[]{"Ja.", "Nein, Datei suchen...", "Beenden."}, "Ja.");
    		
    		// OU.CSL in same directory
    		if (opt_dialog == JOptionPane.YES_OPTION){
    			path = "OU.CSL";
    		}
    		// OU.CSL not in the same directory
    		else if (opt_dialog == JOptionPane.NO_OPTION){
    			JFileChooser chooser = new JFileChooser();
    			// show open-dialog
    			int return_chooser = chooser.showOpenDialog(null);
    			
    			if (return_chooser == JFileChooser.APPROVE_OPTION){
    				// path to OU.CSL
    				path = chooser.getSelectedFile().getName();
    			}
    			else {
    				System.exit(0);
    			}
    			
    		} else {
    			System.exit(0);
    		}
    		
    		// to read the OU.CLS
    		FileReader fr = new FileReader(path);
    		BufferedReader br = new BufferedReader(fr);
    		
    		// to write the new file
    		FileWriter fw = new FileWriter("DiaText.txt");
    		BufferedWriter bw = new BufferedWriter(fw);
    		
    		// line in OU.CLS that is currently being processed
    		String line = "";
    		
    		// dialog text
    		String diaText = "";
    		
    		// iterating through all lines of the OU.CLS
    		while((line= br.readLine()) != null )
    		{
    			
    			// line is a (dialog) text and non-empty
    			if ((line.startsWith("text=string:"))
    			&& (!line.equals("text=string:")))
    			{
    				
    				// cut "text=string:"
    				diaText = line.substring(12);
    				
    				// insert a line break
    				bw.newLine();
    				
    				// write the dialog text
    				bw.write(diaText);
    			}
    		}
    		
    		// close reader and writer
    		br.close();
    		bw.close();
    		
    		// message for user
    		JOptionPane.showMessageDialog(null, "Das Programm ist fertig. Hoffentlich war es erfolgreich!", "Fertig.", JOptionPane.INFORMATION_MESSAGE);
    		
    		// exit program
    		System.exit(0);
    	}
    	
    }


    Für jegliche Anregungen, Kritik oder Hinweise bin ich offen und dankbar. Gerade wenn ihr eine andere (bessere) Methode habt, dasselbe zu erreichen, wüsste ich gerne davon
    Auch Vorschläge, wie man DiaText verbessern könnte, nehme ich gerne an.

    PS: die angehängte Datei muss natürlich entpackt werden



    EDIT 15.07.2014 - Version 2

    Ich habe die Vorschläge / den Code von Christopher25 leicht angepasst für eine neue Version, die nun auch im Anhang zu finden ist.
    Hier der Code:
    Spoiler:(zum lesen bitte Text markieren)
    Code:
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class DiaText {
    	
    	private final String outputFilename = "DiaText.txt";
    	private final String inputFilename = "OU.CSL"; 
    	
    	/**
    	* @param args
    	*/
    	public static void main(String[] args) {
    		try {
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		} catch (ClassNotFoundException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} catch (InstantiationException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} catch (IllegalAccessException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} catch (UnsupportedLookAndFeelException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		}
    		// Hauptobjekt anlegen
    		DiaText diaText = new DiaText();
    		// Datei auslesen und diaText schreiben
    		diaText.writeDiaText(diaText.getFile());
    		// Programm beenden
    		System.exit(0);
    	}
    	
    	public void writeDiaText(File file) {
    		// to read the OU.CLS
    		FileReader fr = null;
    		try {
    			fr = new FileReader(file);
    		} catch (FileNotFoundException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		}
    		BufferedReader br = new BufferedReader(fr);
    
    		// to write the new file
    		FileWriter fw = null;
    		try {
    			fw = new FileWriter(outputFilename);
    		} catch (IOException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		}
    		BufferedWriter bw = new BufferedWriter(fw);
    
    		// line in OU.CLS that is currently being processed
    		String line = "";
    
    		// dialog text
    		String diaText = "";
    
    		// iterating through all lines of the OU.CLS
    		try {
    			while ((line = br.readLine()) != null) {
    				// line is a (dialog) text and non-empty
    				
    				// skip whitespaces at start and end
    				line = line.trim();
    				
    				// if the line is a dialogue text
    				if ((line.startsWith("text=string:"))
    						&& (!line.equals("text=string:"))) {
    
    					// cut "text=string:"
    					diaText = line.substring(12);
    
    					// insert a line break
    					bw.newLine();
    
    					// write the dialog text
    					bw.write(diaText);
    				}
    			}
    		} catch (IOException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} finally {
    			if(br != null) try { br.close(); } catch(Exception e2) {
    				JOptionPane.showMessageDialog(null, e2.getMessage());
    			}
    			if(bw != null) try { bw.close(); } catch(Exception e3) {
    				JOptionPane.showMessageDialog(null, e3.getMessage());
    			}
    		}
    
    		// message for user
    		JOptionPane.showMessageDialog(null,
    				"Das Programm ist fertig. Hoffentlich war es erfolgreich!",
    				"Fertig.", JOptionPane.INFORMATION_MESSAGE);
    	}
    	
    	public File getFile() {
    		// path to OU.CSL
    		String path = "";
    		File myFile = null;
    
    		int opt_dialog = JOptionPane.showOptionDialog(null,
    				"Befindet sich die OU.CSL im selben Verzeichnis?",
    				"Verzeichnis", JOptionPane.YES_NO_CANCEL_OPTION,
    				JOptionPane.QUESTION_MESSAGE, null, new String[] { "Ja.",
    						"Nein, Datei suchen...", "Beenden." }, "Ja.");
    
    		// OU.CSL in same directory
    		if (opt_dialog == JOptionPane.YES_OPTION) {
    			path = inputFilename;
    			return new File(path);
    		}
    		// OU.CSL not in the same directory
    		else if (opt_dialog == JOptionPane.NO_OPTION) {
    			JFileChooser chooser = new JFileChooser();
    			// show open-dialog
    			int return_chooser = chooser.showOpenDialog(null);
    
    			if (return_chooser == JFileChooser.APPROVE_OPTION) {
    				// path to OU.CSL
    				myFile = chooser.getSelectedFile();
    			} else {
    				System.exit(0);
    			}
    
    		} else {
    			System.exit(0);
    		}
    		return myFile;
    	}
    }
    Angehängte Dateien
    Geändert von Milky-Way (15.07.2014 um 15:18 Uhr)

  2. Beiträge anzeigen #2 Zitieren
    Serima Avatar von Fisk2033
    Registriert seit
    Dec 2010
    Ort
    Dresden
    Beiträge
    5.890
     
    Fisk2033 ist offline
    Wow, danke für das Programm. Ich werde es heute Mittag mal ausprobieren. Hört sich schonmal gut an!

  3. Beiträge anzeigen #3 Zitieren
    Kämpfer Avatar von Atmus
    Registriert seit
    Jun 2009
    Beiträge
    390
     
    Atmus ist offline
    Ich hab es auch versucht und ich finde es sehr gut.

  4. Beiträge anzeigen #4 Zitieren
    Veteran
    Registriert seit
    Jan 2012
    Beiträge
    681
     
    Frank-95 ist offline
    When I was on windows XP this tool worked perfectly, now on windows 7 64-bit it doens't anymore.

    If I launch it from the terminal it raises "could not find the main classes" in jre6 and an analogous error in jre7.. What could it be?

  5. Beiträge anzeigen #5 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.378
     
    Milky-Way ist offline
    You need to have the Java Runtime Environment (JRE) installed.
    http://www.oracle.com/technetwork/ja...ceSiteId=otnjp

    I personally also use (and have used when writing the tool) Windows 7 64 bit, so there should not be a problem.

  6. Beiträge anzeigen #6 Zitieren
    Schwertmeister Avatar von Christopher25
    Registriert seit
    Jul 2006
    Ort
    NRW
    Beiträge
    824
     
    Christopher25 ist offline
    Du solltest die Writer in einem Try-Catch block laufen lassen.
    Wenn die mal auf die Schnute fliegen, musst du diese im finally block closen.
    Wenn die jetzt hinfliegen, wird der Programmcode einfach beendet, ohne dass die
    Writer-Dienste geschlossen werden!

    PS:
    Versuch das ganze doch mal mit LookAndFeel ein bisschen zu verschönern,
    der Dialog mit der Dateiauswahl ist in Swing nicht besonders toll ^^
    Geändert von Christopher25 (23.05.2014 um 23:57 Uhr)

  7. Beiträge anzeigen #7 Zitieren
    Schwertmeister Avatar von Christopher25
    Registriert seit
    Jul 2006
    Ort
    NRW
    Beiträge
    824
     
    Christopher25 ist offline
    Ich habe das ganze mal etwas umgeschrieben.

    Spoiler:(zum lesen bitte Text markieren)
    Code:
    package client;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class DiaText {
    	
    	/**
    	* @param args
    	*/
    	public static void main(String[] args) {
    		try {
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		} catch (ClassNotFoundException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} catch (InstantiationException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} catch (IllegalAccessException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} catch (UnsupportedLookAndFeelException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		}
    		// Hauptobjekt anlegen
    		DiaText diaText = new DiaText();
    		// Datei auslesen und diaText schreiben
    		diaText.writeDiaText(diaText.getFile());
    		// Programm beenden
    		System.exit(0);
    	}
    	
    	public void writeDiaText(File file) {
    		// to read the OU.CLS
    		FileReader fr = null;
    		try {
    			fr = new FileReader(file);
    		} catch (FileNotFoundException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		}
    		BufferedReader br = new BufferedReader(fr);
    
    		// to write the new file
    		FileWriter fw = null;
    		try {
    			fw = new FileWriter("DiaText.txt");
    		} catch (IOException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		}
    		BufferedWriter bw = new BufferedWriter(fw);
    
    		// line in OU.CLS that is currently being processed
    		String line = "";
    
    		// dialog text
    		String diaText = "";
    
    		// iterating through all lines of the OU.CLS
    		try {
    			while ((line = br.readLine()) != null) {
    				// line is a (dialog) text and non-empty
    				if ((line.startsWith("text=string:"))
    						&& (!line.equals("text=string:"))) {
    
    					// cut "text=string:"
    					diaText = line.substring(12);
    
    					// insert a line break
    					bw.newLine();
    
    					// write the dialog text
    					bw.write(diaText);
    				}
    			}
    		} catch (IOException e) {
    			JOptionPane.showMessageDialog(null, e.getMessage());
    		} finally {
    			if(br != null) try { br.close(); } catch(Exception e2) {
    				JOptionPane.showMessageDialog(null, e2.getMessage());
    			}
    			if(bw != null) try { bw.close(); } catch(Exception e3) {
    				JOptionPane.showMessageDialog(null, e3.getMessage());
    			}
    		}
    
    		// message for user
    		JOptionPane.showMessageDialog(null,
    				"Das Programm ist fertig. Hoffentlich war es erfolgreich!",
    				"Fertig.", JOptionPane.INFORMATION_MESSAGE);
    	}
    	
    	public File getFile() {
    		// path to OU.CSL
    		String path = "";
    
    		int opt_dialog = JOptionPane.showOptionDialog(null,
    				"Befindet sich die OU.CSL im selben Verzeichnis?",
    				"Verzeichnis", JOptionPane.YES_NO_CANCEL_OPTION,
    				JOptionPane.QUESTION_MESSAGE, null, new String[] { "Ja.",
    						"Nein, Datei suchen...", "Beenden." }, "Ja.");
    
    		// OU.CSL in same directory
    		if (opt_dialog == JOptionPane.YES_OPTION) {
    			path = "OU.CSL";
    		}
    		// OU.CSL not in the same directory
    		else if (opt_dialog == JOptionPane.NO_OPTION) {
    			JFileChooser chooser = new JFileChooser();
    			// show open-dialog
    			int return_chooser = chooser.showOpenDialog(null);
    
    			if (return_chooser == JFileChooser.APPROVE_OPTION) {
    				// path to OU.CSL
    				path = chooser.getSelectedFile().getName();
    			} else {
    				System.exit(0);
    			}
    
    		} else {
    			System.exit(0);
    		}
    		return new File(path);
    	}
    }

  8. Beiträge anzeigen #8 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.378
     
    Milky-Way ist offline
    Zitat Zitat von Christopher25 Beitrag anzeigen
    Ich habe das ganze mal etwas umgeschrieben.
    Danke, ich habe den Code größtenteils übernommen für eine neue Version, die im ersten Beitrag zu finden ist.


    Zwei kleine Probleme damit habe ich noch behoben:

    Code:
    path = chooser.getSelectedFile().getName();
    lieferte nur den Dateinamen, nicht den kompletten Pfad, wodurch das Auswählen, wenn die Datei nicht im selben Ordner ist, nicht funktionierte. Stattdessen nehme ich jetzt gleich die Datei.

    Code:
    if ((line.startsWith("text=string:"))
    war nicht mehr erfüllt. Vielleicht haben ältere Java Versionen whitespaces bei startsWith ignoriert - ich weiß es nicht. Jetzt benutze ich trim(), um diese führenden und anhängenden whitespaces auszulassen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide