Suchen und Ersetzen (Text) [zeilenweise]

Hallo, ich hab hier etwas, was nicht ganz so toll ist:

        Pattern[] pats = new Pattern[]{
            Pattern.compile("Mass (.+)"),
            Pattern.compile("Stiffness (.+)"),
            Pattern.compile("price (.+)"),
            Pattern.compile("bhp (.+)"),
            Pattern.compile("tank (.+)")
        };
        String[] reps = {
            "500.0",
            "10",
            "500",
            "500",
            "500"
        };
        File[] fa = new File("D:\\").listFiles();
        for (File f : fa) {
            if (f.getName().startsWith("tractor")) {
                System.out.println("f = " + f);
                StringBuilder sb = new StringBuilder();

                BufferedReader br = new BufferedReader(new FileReader(f));
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                    sb.append("
");
                }
                br.close();

                for (int i = 0; i < pats.length; i++) {
                    Matcher m = pats**.matcher(sb);
                    if (!m.find()) {
                        throw new RuntimeException("noooo");
                    } else {
                        System.out.println(m.start(1) + " " + m.end(1));
                        System.out.println( m.group() + " " + m.group(1));
                        sb.replace(m.start(1), m.end(1), reps**);
                    }
                }

                PrintWriter pw = new PrintWriter(f);
                pw.print(sb.toString());
                pw.close();
            }
        }
    }```

Erst mal, `Pattern.compile("^Mass (.+)$")` nimmt Java 8 nicht mehr.

Ist es richtig, die komplette Datei einzulesen?

Ginge das nicht mit Linux super einfach?

Grüße

Leg doch mal ein kleines Dateisnippet mit vorher / nachher rein!

sed -i ‘s/Mass (.*)/Mass (99)/g’ cb.txt

vorher

Mass (100)
Mass (200)
Mass (300)
Bluberdiblup

nachher

Mass (99)
Mass (99)
Mass (99)
Bluberdiblup

Schleife ist ja auch kein Ding?

for i in tractor*; do
  sed -i 's/Mass (.*)/Mass (99)/g' "$i"  
  sed -i 's/price (.*)/price (77)/g' "$i"
  sed -i 's/foo (.*)/foo (12345)/g' "$i"
done

Aber Vorsicht aus

Mass (123) price(456) wird Mass (99)

Wie üblich

Was heißt „nicht mehr“? Natürlich „nimmt“ Java 8 das!? Du meinst wohl, es funktioniert nicht so wie du willst?

(Tipp1: wenn du mit readLine einliest, kannst/sollst du doch nichts mit $ matchen…da kannst du doch gleich jede Zeile bearbeiten?)

[edit]
Besserer Tipp: ist dir schon aufgefallen, dass du nur das erste Char in jeder Zeilen auswerten musst?
Wenn deine RuntimeEx Sinn hat, dann teste doch einfach auf M,S,p,b,t und schreib die neue Zeile komplett raus :slight_smile:
[/edit]

Hängt davon ab, was du willst - aber das ist wie immer völlig unklar.

Möglicherweise.

Was genau ist eigentlich deine Frage, warum hast du den Schrott gepostet?

Danke…

Also man sieht, in Linux (bash) sind es nur 4 Zeile n.

Zu meinem “Problem”. Ich hab Spiele-Konfiguration-Skript-Dateien.

Alle Traktoren sollen so getunt werden, so dass sie 500kg, 500ps und 500€ kosten.

Welche Auswirkungen ‘Steifigkeit’ auf ein Fahrzeug hat, hab ich noch nicht rausfinden können.

Die Dateien sind zeilenweise aufgebaut,

in einer Zeile steht nur Name/Variable und Wert,

allerdings nicht in einer festen Reihenfolge.

Ich bin ja Progger, deshalb öffne ich nicht einfach den Editor, um nix zu vergessen.

Trotzdem muss eine Lösung einfach, elegant, übersichtlich usw. sein.

BufReader und PrintWrt zerstört mir /r/n, aber das stört das Spiel nicht.

Wie man etwas beamen könnte, wisst ihr auch nicht, oder?

Danke für alle bisherigen Antworten.

Edit: Ja, der Quantifier ist gefräßig und frisst whrs. auch das Zeilenende, aber ich bin mir sicher, etwas wurde bei parse/compile RegEX zwischen Java 7 und 8 geändert - aber nur so ne Vermutung.

Na ja

Diese Information ist geheim.

*** Edit ***

Ich bin mir sogar absolut felsenfest sicher - aber das ist nur eine ganz vage Vermutung.

Du brauchst also Hilfe beim cheaten, weil du als Progger nicht weißt wie du es machen sollst?
Auch in Java braucht man dafür nicht viele Zeilen, wenn man will, man kann aber auch viele Zeilen unschönen/unleserlichen Code schreiben, das ist jedem selbst überlassen, jedenfalls wenn man sich seine Hacks für Spiele schreibt.
Zu deiner frage mit dem Beamen, da musst du Scotty fragen (aber das ist erst in ein paar Jahren so weit)