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

 

Results 1 to 8 of 8
  1. View Forum Posts #1 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is 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;
    	}
    }
    Attached Files
    Last edited by Milky-Way; 15.07.2014 at 15:18.

  2. View Forum Posts #2 Reply With Quote
    Serima Fisk2033's Avatar
    Join Date
    Dec 2010
    Location
    Dresden
    Posts
    5,334
     
    Fisk2033 is online now
    Wow, danke für das Programm. Ich werde es heute Mittag mal ausprobieren. Hört sich schonmal gut an!

  3. View Forum Posts #3 Reply With Quote
    Kämpfer Atmus's Avatar
    Join Date
    Jun 2009
    Posts
    377
     
    Atmus is offline
    Ich hab es auch versucht und ich finde es sehr gut.

  4. View Forum Posts #4 Reply With Quote
    Veteran
    Join Date
    Jan 2012
    Posts
    663
     
    Frank-95 is 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. View Forum Posts #5 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is 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. View Forum Posts #6 Reply With Quote
    Schwertmeister Christopher25's Avatar
    Join Date
    Jul 2006
    Location
    NRW
    Posts
    824
     
    Christopher25 is 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 ^^
    Last edited by Christopher25; 23.05.2014 at 23:57.

  7. View Forum Posts #7 Reply With Quote
    Schwertmeister Christopher25's Avatar
    Join Date
    Jul 2006
    Location
    NRW
    Posts
    824
     
    Christopher25 is 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. View Forum Posts #8 Reply With Quote
    now also in your universe  Milky-Way's Avatar
    Join Date
    Jun 2007
    Posts
    13,187
     
    Milky-Way is offline
    Quote Originally Posted by Christopher25 View Post
    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.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
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