HX3 Foren

HX3 Foren (http://hx3.de/)
-   Community (http://hx3.de/community-173/)
-   -   mdhClassReplace (http://hx3.de/community-173/mdhclassreplace-25534/)

Moerderhoschi 17.09.2016 22:14

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.

http://moerderhoschi.bplaced.net/pub...eplace.cfg.png

http://moerderhoschi.bplaced.net/pub...aceLog.txt.png

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 :D -> 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

Moerderhoschi 18.09.2016 17:14

update zu v1.1:
- problem mit groß/kleinschreibung beim klassennamen ersetzen gefixt
- mehr klassennamen zum ersetzten in die mdhClassReplace.cfg hinzugefuegt

mdhClassReplace.jar Source im ersten Beitrag ebenfalls aktualisiert

Pfandgiraffe 19.09.2016 14:04

Gutes Tool zum porten. Danke Hoschi! :)

Pfandgiraffe 12.11.2016 10:37

Kann man damit auch A1 Missionen irgendwie porten? Habe es eben versucht, bekomme aber nur diesen Eintrag im Log, ohne das die Mission geportet wird.

Zitat:

Sat Nov 12 11:34:37 CET 2016 --> pgmStart
Sat Nov 12 11:34:37 CET 2016 --> currentDir: C:\Users\norma_000\Documents\Linkgeber für Rocketdock\A3 Edit\mdhClassReplace
Sat Nov 12 11:34:37 CET 2016 --> checkFile: C:\Users\norma_000\Documents\Linkgeber für Rocketdock\A3 Edit\mdhClassReplace\[CTF] (20) Corridor v1.Sara\mission.sqm
Sat Nov 12 11:34:37 CET 2016 --> pgmEnd

Grüße

Moerderhoschi 12.11.2016 11:10

ja geht auch, jedoch muss erst in der mdhClassReplace.cfg Datei die alten A1 Klassennamen mit den jetzigen zu ersetzenden CupKlassennamen befuellt werden.

Die letzte verfuegbare version ist nur mit A2 Klassen und den CupReplacements versorgt: mdhClassReplace.cfg

Falls Du Dir die Muehe geben solltest und die A1 Klassennamen sowie durch die zu ersetzenden CupKlassennamen zusammen zu suchen, wuerde ich mich sehr freuen falls Du die erweiterte mdhClassReplace.cfg bereitstellst :)

Pfandgiraffe 12.11.2016 16:07

Ok, also muss ich eigentlich "nur" die Classnames definieren damit die sqm portiert wird. Mich hatte es eben nur verwundert, dass die mission.sqm zwar erkannt wurde aber gänzlich unberührt blieb.


Grüße

Moerderhoschi 12.11.2016 16:45

Ja genau, einfach die A1 Klassen und Cup Klassen in der mdhClassReplace.cfg definieren dann sollte das klappen.

Das System funktioniert ganz simpel, links vom Semicolon alter Klassenname und rechts neuer Klassenname:

KlassenNameVorher;KlassenNameNachher

Ich denke wich werde die Tage mal die neue Version des JavaPGMs hochladen, dort werden dann auch .sqs und .ext mit bearbeitet.

Pfandgiraffe 12.11.2016 18:19

Topp! :daumen:

Ich habe die ersten 150 Classnames aufgenommen. Ich schick dir die Datei wenn ich soweit alles habe.


Grüße

Moerderhoschi 12.11.2016 21:01

update v1.2:

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116