Einzelnen Beitrag anzeigen
Alt 17.09.2016, 22:14   #1 (permalink)
Moerderhoschi
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 33
Beiträge: 2.665
Standard mdhClassReplace

mdhClassReplace.jar ist ein simples Javaprogramm um classnames in ext, sqs, sqf, sqm dateien im order und unterorder des tools zu aendern. Die ausgetauschten classnames stehen in der mdhClassReplace.cfg datei.





wie funktionierst:
1. erstelle und schreibe in die mdhClassReplaceLog.txt lognachrichten
2. die mdhClassReplace.cfg wird eingelesen um die classnames zu ermitteln welche in den ext, sqs, sqf und sqm dateien ausgetauscht werden sollen
3. jede ext, sqs, sqm, sqf datei im ordner und in den unterordnern des tools werden durchscannt und die classnames ausgetauscht

ein kleines beispiel fuer die verwendung um A2 missionsne nach A3 mit CUP zu portieren:
1. runterladen des tools mdhClassReplace.7z
2. extrahieren des tools in einen neuen ordner
3. arma2 missionsordner in den selben ordner wie das tool
4. ausfuehren der mdhClassReplace.jar
5. einen blick in die mdhClassReplaceLog.txt werden und pruefen was gemacht wurde
6. den arma2 missionsordner anschließend in den arma3 mission ordern kopieren und die mission im Arma 3 3D editor oeffnen

die verwendung des tools/mdhClassReplace.jar auf eigene gefahr

Download: http://moerderhoschi.bplaced.net/pub...lassReplace.7z

my A2 -> CUP ClassnameMSExcelWar -> http://moerderhoschi.bplaced.net/pub...Classnames.png

mdhClassReplace.jar Source:
Code:
package mdhClassReplace;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class mdhClassReplace {

	public static void dirTree(File dir, List classOld, List classNew) {
		File[] subdirs = dir.listFiles();
		for (File subdir : subdirs) {
			if (subdir.isDirectory()) {
				dirTree(subdir, classOld, classNew);
			} else {
				doFile(subdir, classOld, classNew);
			}
		}
	}

	public static void doFile(File file, List classOld, List classNew) {
		String extension = "";
		int i = file.getName().lastIndexOf('.');
		if (i > 0) {
			extension = file.getName().substring(i + 1).toLowerCase();
		}

		if (extension.contentEquals("sqm")
				|| extension.contentEquals("sqf")
				|| extension.contentEquals("sqs")
				|| extension.contentEquals("ext")) {
			writeLog("checkFile: " + file.getAbsolutePath());
			rplTxt(file.getAbsolutePath(), classOld, classNew);
		}
	}

	public static void rplTxt(String fileName, List classOld, List classNew) {

		Path path = Paths.get(fileName);
		Charset charset = StandardCharsets.UTF_8;

		String content = null;

		try {
			content = new String(Files.readAllBytes(path), charset);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		String contentLower = content.toLowerCase();

		boolean foundClass = false;
		for (int i = 0; i < classOld.size(); i++) {
			String classOldS = "\"" + classOld.get(i).toString() + "\"";
			String classNewS = "\"" + classNew.get(i).toString() + "\"";
			if (contentLower.contains(classOldS.toLowerCase())) {
				foundClass = true;
				content = content.replaceAll("(?i)"+classOldS, classNewS);
				writeLog("changedClass: " + classOldS + " to " + classNewS);								
			}
			
			classOldS = "'" + classOld.get(i).toString() + "'";
			classNewS = "'" + classNew.get(i).toString() + "'";
			if (contentLower.contains(classOldS.toLowerCase())) {
				foundClass = true;
				content = content.replaceAll("(?i)"+classOldS, classNewS);
				writeLog("changedClass: " + classOldS + " to " + classNewS);
			}
		}

		if (foundClass) {
			try {
				Files.write(path, content.getBytes(charset));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void writeLog(String logTxt) {
		PrintWriter out;
		logTxt = new java.util.Date() + " --> " + logTxt;
		try {
			out = new PrintWriter(new BufferedWriter(new FileWriter(
					"mdhClassReplaceLog.txt", true)));
			out.println(logTxt);
			System.out.println(logTxt);
			out.close();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

	}

	public static void main(String[] args) {

		writeLog("-------------------------------");
		writeLog("pgmStart");
		String currentDir = System.getProperty("user.dir");
		writeLog("currentDir: " + currentDir);

		File f = new File(currentDir);
		File c = new File(currentDir.concat("\\mdhClassReplace.cfg"));

		if (c.exists() && !c.isDirectory()) {

			String classOldS = "";
			String classNewS = "";
			List classOld = new ArrayList();
			List classNew = new ArrayList();

			try {
				BufferedReader in = new BufferedReader(new FileReader(c));
				String actLine = null;
				while ((actLine = in.readLine()) != null) {

					int seperatorPos = actLine.indexOf(";");
					classOldS = actLine.substring(0, seperatorPos);
					classNewS = actLine.substring(seperatorPos + 1);

					if (!classOldS.isEmpty() && !classNewS.isEmpty()) {
						classOld.add(classOldS);
						classNew.add(classNewS);
					}

				}
			} catch (IOException e) {
				e.printStackTrace();
				writeLog("pgmError: error while reading mdhClassReplace.cfg");
				System.exit(-1);
			}

			dirTree(f, classOld, classNew);
		} else {
			writeLog("mdhClassReplace.cfg not found");
		};
		
		writeLog("pgmEnd");
	}
}
updates:
v1.1
- problem mit groß/kleinschreibung beim klassennamen ersetzen gefixt
- mehr klassennamen zum ersetzten in die mdhClassReplace.cfg hinzugefuegt

v1.2
- mdhClassReplace.cfg um weitere Klassen ergaenzt
- update vom Javaprogramm, .sqs sowie .ext werden nun auch geprueft

gruß
hoschi
__________________



Geändert von Moerderhoschi (18.09.2016 um 17:13 Uhr). Grund: update 1.1
Moerderhoschi ist offline   Mit Zitat antworten