Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Per Batch Texteile entfernen und verschieben, Sonderzeichen und Zeilenumbrüche löschen

Frage Entwicklung Batch & Shell

Mitglied: romberto

romberto (Level 1) - Jetzt verbinden

10.04.2013 um 08:20 Uhr, 1787 Aufrufe, 9 Kommentare, 2 Danke

Hallo,

ich habe mal wieder ein Problem mit unseren Archivierten Firmendateien. Dank eurer Hilfe konnte ich die "Neuzeit" schon ziemlich Fix abarbeiten. Die 1980er und 1990er Jahre bereiten mir aber immernoch arges Kopfzerbrechen. Hier wurde damals auf Commodore gearbeitet und der damalige "Administrator" hatte ein BBS eingerichtet. Mangels Kenntnis und geeigneter Hardware habe ich auf das BBS selbst leider keinen Zugriff. Nach intensiver Recherche konnte ich jetzt jedoch mittels eines Amiga Emulators (Ja, Tatsache) die .DIZ Dateien der Archive in eine Liste schreiben.

Diese gilt es nun in ein Schema zu bringen:

Unser "Administrator" hat sich nun leider bei der Dateienbeschreibung mit wahren Ascii Kunstwerken verwirklicht, was es mir keineswegs einfacher macht.

Hier ist mein Beispiels-Output:

01.
[0036] mu-arbp5.TXT           
02.
Filetype: ASCII                    _________  ____ _ ___           __      
03.
Size: 47390                   _______  
04.
Date: 22-Aug-1995            .\--»   ___/ .\   ___/______ _/___/__\/\/__/  
05.
                             ¦                                          : 
06.
                             ¦ Arbeitsprojekt Mustermann 5.0            . 
07.
                             :                                          ¦ 
08.
                             `----------------------------[           ]-' 
09.
                              
10.
 
11.
[0037] blamap.zip           ,__ ______                    ______ 
12.
Filetype: ZIP                 ___\  ____)|__   __ __,   ____  ____) ____ 
13.
Size: 70003                  |                     |  
14.
Date: 04-Sep-1991            .-----------\----------------\------------\. 
15.
                             |                                          | 
16.
                             ·------------------------------------------· 
17.
                             | Mappe Blablabla                          | 
18.
                             | noch mehr Blablabla                      | 
19.
                             | usw...                                   | 
20.
                             |                                          | 
21.
                             `------------------------------------------' 
22.
                              ____ 
23.
                             /\___\ ___ __ _ 
24.
                             \/___/        /__ _   
Das ganze muss am Schluß dann so aussehen:

01.
mu-arbp5.TXT [TAB] 22-Aug-1995 [TAB] Arbeitsprojekt Mustermann 5.0 
02.
bla-map.zip  [TAB] 04-Sep-1991 [TAB] Mappe Blablabla # noch mehr Blablabla # usw...
Ihr seht, keine leichte Aufgabe. Meine Überlegungen gehen in folgende Richtung:

- Löschen einzelner Textbausteine ("Filetype:" und "Size:" + jeweils 15 Folgezeichen)
- Verschieben einzelner Textbausteine in je ein Temporäres Dokument (Date: + 15
Folgezeichen und [xxxx] + 15 Folgezeichen mit anschließender Löschung von [xxxx])
- Entfernen aller Sonderzeichen und Zeilenumbrüche in der Beschreibung
- Zusammenfügen der einzelnen Bausteine

Wie und ob das ganze überhaupt zu verwirklichen ist, ist mir allerdings ein Rätsel. Sollte das ganze via Batch nicht zu verwirklichen sein, wäre ich wirklich über jeden weiteren (auch Teil-) Lösungsvorschlag dankbar! Sei es VB, Shell, spezielle Editoren, Office Programme, Shareware etc..

Viele Grüße und schonmal vielen Dank fürs anschauen

Euer Robert
Mitglied: hmarkus
10.04.2013, aktualisiert um 10:16 Uhr
Hallo
01.
#!/usr/bin/perl 
02.
 
03.
use strict ; 
04.
use warnings ; 
05.
use feature 'say' ; 
06.
 
07.
open DATEI, "projekte.txt" ; 
08.
undef $/ ; 
09.
 
10.
my $file = <DATEI> ; 
11.
my @records = split /\[\d\d\d\d\]/, $file ; 
12.
close DATEI ; 
13.
 
14.
my ( $rec, $i ) ; 
15.
foreach $rec ( @records ) { 
16.
    my ( $name, $date, $text ) ; 
17.
    next if $rec eq "" ; 
18.
    my @lines = split /\n/, $rec ; 
19.
    foreach ( @lines ) { 
20.
        s/^\s+[^a-zA-Z0-9 ]// ; 
21.
        s/\s+[^a-zA-Z0-9]+$// ; 
22.
        s/^[^a-zA-Z0-9]*$// ; 
23.
        s/^\s+// ; 
24.
        if ( $_ =~ m/Date: ([-0-9A-Za-z]+)/ ) { 
25.
            $date = $1 ; 
26.
27.
28.
    $name = $lines[0] ; 
29.
    for ( $i=4; $i<@lines; $i++ ) { 
30.
        $text .= $lines[$i] if $lines[$i] !~ /^\s?$/ ; 
31.
32.
    say "$name;$date;$text" ; 
33.
}
Ausgabe
mu-arbp5.TXT;22-Aug-1995;� Arbeitsprojekt Mustermann 5.0 
blamap.zip;04-Sep-1991;Mappe Blablablanoch mehr Blablablausw..
Ich habe das Zeichen vor "Arbeitsprojekt" nicht in den Griff bekommen .
Das Ergebnis wäre dann eine CSV-Datei die Du problemlos mit Excel weiter verarbeiten könntest.
Außerdem habe ich die Textzeilen einfach aneinander gehängt. Das lässt sich leicht ändern.

Wenn Du keinen Linuxrechner hast, dann installier Dir Strawberry-Perl

Und wenn Du gar nicht zurechtkommst, dann schick mir eine PN mit einem Angebot, ich kann Dir das auch umwandeln.

Markus
Bitte warten ..
Mitglied: romberto
10.04.2013 um 10:56 Uhr
Hi Markus,

vielen dank schoneinmal für dein Perl Script. Leider bekomme ich sowohl unter Ubuntu als auch mit Strawberry-Perl unter Windows folgende fehlermeldungen:

Bei unveränderter Anwendung:

01.
readline() on closed filehandle DATEI at c:\script\perl.pl line 10. 
02.
Use of uninitialized value $file in split at c:\script\perl.pl line 11.
wenn ich nun (zugegeben ein reiner Schuss ins Blaue) <DATEI> durch <projekte.txt> ersetzte bekomme ich folgendes:

01.
Use of uninitialized value $date in concatenation (.) or string at c:\script\perl.p 
02.
l line 32. 
03.
Use of uninitialized value $text in concatenation (.) or string at c:\script\perl.p 
04.
l line 32. 
05.
projekte.txt;;
da ich von Perl rein garkeine Ahnung habe, bitte ich etwaige Anfängerfehler nicht allzu hart abzustrafen

Viele Grüße

Robert
Bitte warten ..
Mitglied: hmarkus
10.04.2013, aktualisiert um 11:06 Uhr
Also
01.
open DATEI, "projekte.txt" ; 
projekte.txt wäre der Dateiname der zu öffnenden Datei (wo Deine Daten drin sind). "Datei" ist das sog. Filehandle, mit dem spricht man die geöffnete Datei im Programm an, das musst Du nicht ändern. ersetze projekte.txt Durch den Dateinamen (evtl. auch Pfad), den diese Datei bei Dir hat.

Dann öffnet das Skript diese Datei und wenn weitere Fehlermeldungen kommen, poste diese bitte.

Ach ja, wenn es mehrere Dateien sind, dann kann man das natürlich so abändern, dass die auf der Kommandozeile übergeben werden. Auch das Schreiben der Ausgabe in eine Datei kann man "nachrüsten".

Markus
Bitte warten ..
Mitglied: romberto
10.04.2013 um 12:00 Uhr
Hallo Markus,

Dank dir! Ich hatte die Datei zwar in projekte.txt umbenannt, aber der fehlende Pfad war das Problem, jetzt funktioniert es wie es soll

Den Scriptstart und das Schreiben in eine neue Textdatei habe ich mit einer kleinen Batch gelöst:

01.
@echo off & setlocal 
02.
perl c:\script\perl.pl >> c:\script\sortiert.txt 
03.
pause
Allerdings werden ab und an einige Sonderzeichen dennoch mit ausgelesen -> gibt es eine Möglichkeit die Ausschlusszeichen für die Beschreibungszeile zu erweitern?

Ansonsten bin ich wirklich Happy

Vielen Dank nochmal

Robert
Bitte warten ..
Mitglied: hmarkus
10.04.2013 um 12:08 Uhr
Wenn man davon ausgeht, dass jede "gewünschte" Zeile mit einem Buchstaben oder einer Zahl anfängt, dann kann man hinter Zeile 23 einfügen
s/^[^A-Za-z0-9]+// ;
Das löscht alle Zeichen am Beginn jeder Zeile, die nicht Buchstabe oder Zahl sind.

Reicht das?

Markus
Bitte warten ..
Mitglied: romberto
10.04.2013 um 12:35 Uhr
Hi Markus,

Vielen Dank - das klappt schon viel besser. Das was nun über bleibt sind Muster / Zeichenfolgen in denen z.B. Buchstaben stehen:

01.
|:\/_______l____j_\________\/ /___:    l |:|
da werde ich um eine manuelle Bearbeitung wohl nicht rum kommen.

Bzw. wäre es nicht auch möglich eine Art Zeichenkatalog zu erstellen, anhand dessen ich mittels einer Batch bestimmte Muster aus dem finalen Text löschen könnte? Viele Muster kommen immer wieder vor und wenn es möglich wäre jedes Muster das Neu auftaucht manuell in eine art Datenbank einzutragen, hätte man irgendwann alles abgedeckt.

Viele Grüße

Robert
Bitte warten ..
Mitglied: hmarkus
10.04.2013, aktualisiert um 12:52 Uhr
Hinter Zeile 15 füge mal
if ( $_ !~ m/[a-zA-Z0-9][a-zA-Z0-9]+/ ) { 
            $_ = "" ; 
        }
ein. Damit werden alle Zeilen gelöscht, in denen nicht mindestens zwei alphanumerische Zeichen hinter einander vorkommen.

Kürzer ginge auch
if ( $_ !~ m/\w\w+/ ) { 
     ....
Markus
Bitte warten ..
Mitglied: romberto
10.04.2013 um 13:22 Uhr
Hi Markus,

Puh... das scheint alles nur ein Tropfen auf den heißen Stein zu sein. Ich bin ja froh, dass es schon soweit funktioniert, wie es das jetzt tut. Aber ich denke ohne eine Art "Lösche bestimmte Zeichenfolge / Satzfolge anhand einer vorgegebenen Liste" komme ich hier wohl nicht aus. Dafür werde ich aber gleich nochmals eine seperate neue Frage eröffnen.

Nochmals vielen, lieben Dank für deine Mühe und dein super Script!

Viele Grüße

Robert
Bitte warten ..
Mitglied: hmarkus
11.04.2013, aktualisiert um 00:19 Uhr
So, hier noch eine Lösung bei der zumindest für Dein gepostetes Beispiel keine überschüssigen Zeichen bleiben.
01.
#!/usr/bin/perl 
02.
 
03.
use strict ; 
04.
use warnings ; 
05.
 
06.
open DATEI, "projekte.txt" ; 
07.
while ( <DATEI> ) { 
08.
    s/\s[^a-zA-Z0-9]+(\n)/$1/g ; 
09.
    s/\|/ /g ; 
10.
    s/¦//g ; 
11.
    s/Filetype.*$// ; 
12.
    s/Size.*$// ; 
13.
    s/Date:\s// ; 
14.
    s/^\s+//g ; 
15.
    s/^$//g ; 
16.
    s/\n/ # / ; 
17.
    s/\[\d+[^]]\]\s/\n/ ; 
18.
    print $_ ; 
19.
20.
print "\n" ;
Ausgabe
mu-arbp5.TXT # 22-Aug-1995 # Arbeitsprojekt Mustermann 5.0 #  
blamap.zip # 04-Sep-1991 # Mappe Blablabla # noch mehr Blablabla # usw... #
Es ist sehr vereinfacht gegenüber obigem Skript. Ich hab einfach überall # eingefügt. Du kannst das Problemlos in Excel laden, mit # als Trenner zwischen den Spalten und dann einfach alle Spalten ab der dritten verbinden.

Zu Deinem anderen Thread: nein, ich würde es nicht mit VBS machen hier sind Reguläre Ausdrücke das Mittel der Wahl. Und solche Aufgaben sind es, für die Larry Wall einst Perl erfunden hat.

Markus
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...