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