Einzelnen Beitrag anzeigen
Ungelesen 07.12.18, 19:32   #7
Wornat1959
Profi
 
Registriert seit: Aug 2016
Beiträge: 1.857
Bedankt: 6.242
Wornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt PunkteWornat1959 leckt gerne myGully Deckel in der Kanalisation! | 2119272 Respekt Punkte
Standard

@Kaiser11:
Das hier ist ja schon eine Art "Replace" wenn ich die Semantik richtig erfasse:
Code:
@echo off &setlocal
set "search=%"
set "replace=%2"
set "textfile=Input.txt"
set "newfile=Output.txt"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>"%newfile%"
del %textfile%
rename %newfile% %textfile%
Dir fehlt auf der S*****-Ebene nur das er das Ergebnis aus dem find für jeden Key/Value ausführt. Könnte man auch auf der S*****-Ebene lösen. Aber mir ist die Windows-Shell-Syntax zu krude. Auf der Linuxebene mit nem Shellskript gerne. Aber dann brauchste eine "bash" unter Windows.

Weil dir plattformunabhängigkeit wichtig war kannste aber auch Java nehmen. Das nötige JRE kannste für nahezu jede Plattform bekommen.

Und dann vielleicht so:
Code:
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.Scanner;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Errorlogger
{
    public static final String LOG_VERZEICHNIS = "C:\Logfiles";
    public static final String LOG_SUFFIX = ".log";
    
    public static final HashMap replaceMap = new HashMap <String, String> ()
                                {{ put("Error03", "Motor2"); 
                                   put("Error12", "Motor1"); 
                                   put("Error08", "Motor3"); 
                                }};
    
    private static File logDirectory;
    private static File[] logFiles;
    
    public static void main(String[] args)
    {
        logDirectory = new File(LOG_VERZEICHNIS);
        logFiles = logDirectory.listFiles(new FilenameFilter()
        {
            @Override
            public boolean accept(File dir, String name)
            {
                return name.toLowerCase().endsWith(LOG_SUFFIX);
            }
        });
        
        Iterator<String> keyIterator;
        String laufSearch;
        String laufReplace;
        String laufLine;
        Scanner scanner;

        for (int lauf=0; lauf<logFiles.length; lauf++)
        {
            keyIterator = replaceMap.keySet().iterator();
            while (keyIterator.hasNext())
            {
                laufSearch = keyIterator.next();
                laufReplace = (String) replaceMap.get(laufSearch);
                
                try
                {
                    scanner = new Scanner(logFiles[lauf]);
                }
                catch (FileNotFoundException ex)
                {
                    ex.printStackTrace();
                }

                while (scanner.hasNextLine()) 
                {
                    laufLine = scanner.nextLine();
                    
                    Pattern pat = Pattern.compile(laufSearch);
                    Matcher match = pat.matcher( laufLine );
                    if (match.find()) 
                    {
                        System.out.println(laufLine.replace(laufSearch, laufReplace));
                    }
                }
            }
        }
    }
}
Dann kommt die Ausgabe auf den Bildschirm (stdout). Du kannst das aber dann genauso wie beim find mit dem ">>"-Operator in eine Datei umleiten.
Man könnte das auch per java noch wieder in eine Datei schreiben - hatte ich aber keine Lust mehr drauf ...

Es wird übrigens wirklich ersetzt und nicht eine neue Zeile eingebaut. Weil das war das was das Code-Schnippsel das du oben hattest auch macht wenn ich die Semantik richtig verstanden hatte. Also du bekommst dann so eine Ausgabe:
Code:
run:
01.01.2018_16:45 Motor3
01.01.2018_14:34 Motor1
Achja und du definierst die Zuordnung der Error->Motor Beziehungen oben in der replaceMap. Genauso stellste da das Verzeichnis wo die Logdateien liegen ein und kannst auch noch deren Dateisuffix einstellen. Das liesse sich auch noch weiter in den Aufruf des Programs auslagern als Parameter. Aber das Programm ist nur ein erster Ansatz für eine Java-Lösung und lässt sich sicher weiter verbessern.
__________________
"Mitleid und Erbarmen hielten Bilbos Hand zurück. Viele, die leben, verdienen den Tod und manche, die sterben, verdienen das Leben. Kannst du es ihnen geben, Frodo? Dann sei nicht so rasch mit einem Todesurteil bei der Hand. Selbst die ganz Weisen erkennen nicht alle Absichten. Mein Herz sagt mir, dass Gollum noch eine Rolle zu spielen hat, zum Guten oder zum Bösen, ehe das Ende kommt." (Gandalf zu Frodo)

Geändert von Wornat1959 (07.12.18 um 19:39 Uhr)
Wornat1959 ist offline   Mit Zitat antworten
Folgendes Mitglied bedankte sich bei Wornat1959:
0x331 (08.12.18)