130834
Goto Top

Zeilenumbruch-Zeilen-Vorschub entfernen? (Batch)

Hallo Leute,

Ich bin's wieder, mit einem verzwickten Problem.

Und ich hab folgendes Problem...
Ich habe eine riesige Logfile ( nicht wirklich, aber für Verarbeitungs-Verhältnisse ), ungefähr 4 MB / 30'000 Linien welche ungünstig Formatierten Text enthält.
Die Logfile wird durch diesen Befehl erzeugt;

robocopy C:\. NULL *.txt /mt 5 /xd "*microsoft*" "*windows*" /l /s /ndl /xx /nc /ns /njh /njs /fp /log+:"%temp%\eineDatei.txt"  


Eine Linie des Logs sieht etwa so aus:
(6 Tabs)(2 Leerzeichen zwischen dem 2 und 3 Tab)DATEIPFAD(Un-identifizierbare ASCII/HEX Charakter)100%

Nun würde ich gerne diese Datei in nur
DATEIPFAD
Verwurschteln.

Das Problem dabei ist nur, die Un-identifizierbaren Charakter,
meiner Recherche Zufolge HEX: 0D und 0A versalzt mir den Braten.

Der Normale Editor zeigt diese Charakter nicht an.
CMD / Batch verwendet diese Charakter wie einen Carriage Return Charakter.
NotePad++ und eine C# Console App verwenden diese Charakter als Zeilenumbruch.

Ich habe es sogar hingekriegt eine Stand-alone C# App zu machen welche mir den Text formatiert.

Der Code;

            Encoding.GetEncoding(1252);
            string TempDir = Environment.GetEnvironmentVariable("temp");  
            var lines = File.ReadLines(temp + @"\eineDatei.txt");  
            foreach (var line in lines)
            {
                if ((string.IsNullOrEmpty(line)) == false)
                {
                    if (line !="100%  ") {  
                        string output = line;
                        output = output.Replace("\t", "");  
                        output = output.Remove(0, 2);
                        File.AppendAllText(temp + @"\zweiteDatei.txt", output + "\n");  
                        Console.WriteLine(output);
                    }

Da habe ich das Problem das der Code gefühlt noch langsamer als eine Batch ist. ( Und auch werden Umlaute Trotz Encoding .. nicht richtig geschrieben? )

Google gibt mir dazu nicht wirklich etwas an...
Die Charaktere um die es geht wird bei suche danach als Line feed und Carriage Return angegeben.
Ich würde diese Charakter gerne loswerden, ebenso die Leerzeichen und die Tabs.
Die Leerzeichen kann ich leider nicht einfach im ganzen String ersetzten, da der Pfad ja ein Leerzeichen enthalten könnte.

Wie bekomme ich jetzt aus diesem Chaos nur den Pfad heraus?
Die Aufgabe ist nicht einmalig, muss also automatisiert sein.

Hier noch ein Bild von NotePad++ und Editor beim anzeigen der Zeichen.

screenshot_3


Ich bin dankbar für jede Hilfe!

Schönen Abend noch,

lg clragon



PS:
(Paste der Zeichen mit "", keine Ahnung ob das Forum sie zerstört)
"
"

Content-Key: 330673

Url: https://administrator.de/contentid/330673

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: 132272
132272 27.02.2017 aktualisiert um 20:20:56 Uhr
Goto Top
In Batch tuts doch eine simple FOR-Schleife, die erledigt das gleich mit face-smile:
for /f "tokens=*" %%a in ('robocopy "C:\quelle" "C:\ziel" /S /FP /ZB /L /NS /NP /NC /NJH /NJS /NDL') do @echo %%a  

Gruß

p.s. wenn ich sowas mit c# machen würde dann mit einem Regex für alle Zeilen
^\s+|\s+$
Das entfernt nicht sichtbare führende und hinten angestellte Zeichen.
Mitglied: 130834
130834 27.02.2017 um 18:32:27 Uhr
Goto Top
Nein, nicht wirklich. Du hast da etwas vergessen.
Es geht darum das durch /mt in robocopy die Charakter und 100% hinzugefügt werden welche den Originalen Algorithmus
( welcher auch so wie von dir oben beschrieben aussieht ) durcheinander bringen.
Außerdem ist die /Log Funktion unglaublich effizient im vergleich zu FOR in 'CMD'
Leider ist die Nach-Verarbeitung in Batch durch die Sonder-Zeichen etwas schwierig und mein C# Mechanismus ist ebenfalls sehr langsam...

lg clragon
Mitglied: rubberman
Lösung rubberman 27.02.2017 um 18:38:08 Uhr
Goto Top
Hallo clragon.

ROBOCOPY kennt die Option /np. Damit verschwinden das einzeln stehende Carriage Return und die Prozentausgabe. Und schon hast du was du willst, die Pfade ohne nachgestellten Mist...

Grüße
rubberman
Mitglied: 130834
130834 27.02.2017 um 18:54:25 Uhr
Goto Top
Warum müssen die Antworten auf meine Fragen immer so peinlich einfach sein? face-confused
Danke für die Antwort jedenfalls, jetzt muss ich nur noch alle Tabs und Leerzeichen am Anfang entfernen.
Was da wohl am effizientesten ist...?

lg clragon
Mitglied: rubberman
rubberman 27.02.2017 um 19:57:48 Uhr
Goto Top
jetzt muss ich nur noch alle Tabs und Leerzeichen am Anfang entfernen.
Was da wohl am effizientesten ist...?

Keine Ahnung was du nutzen willst. C#? Ich hab keine Ahnung von C#, aber Google sagt
https://msdn.microsoft.com/en-us/library/system.string.trimstart(v=vs.11 ...

Grüße
rubberman
Mitglied: miniversum
miniversum 27.02.2017 um 20:14:37 Uhr
Goto Top
Na Tabs und leerzeichen bekommst du wieder mit ner For schleife weg.
Mitglied: 132272
132272 27.02.2017 aktualisiert um 20:36:43 Uhr
Goto Top
Nimm sed schneller bekommst du's dann wirklich nicht mehr. p.s. Sed gibt's auch für Windows.
sed -re 's/^\s*|\s*$//g' datei.txt  
Mitglied: rubberman
rubberman 27.02.2017 um 20:37:01 Uhr
Goto Top
Japp, die FOR Lösung kennt er schon face-wink
FOR R Ordner Filterung? KLAMMERAUF BATCH KLAMMERZU
Mitglied: 130834
130834 27.02.2017 um 20:42:41 Uhr
Goto Top
Ah, vielen Dank dafür, aber in Zwischenzeit habe
ich bereits eine 2-Sekunden Lösung in C# geschrieben, welche perfekt funktioniert.

Trotzdem danke face-smile