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

Mit Batch-Datei Textdatei nach Zeichenblöcke suchen, ausschneiden und in neues Textfile einfügen

Frage Entwicklung Batch & Shell

Mitglied: Calim3ro

Calim3ro (Level 1) - Jetzt verbinden

22.02.2013 um 13:56 Uhr, 2560 Aufrufe, 7 Kommentare

Hallo Administradoren und Mods

erstmal ein grosse Lob an diese Seite und die Benutzer, sie hat mir schon des öfteren weitergeholfen.

Ich möchte aus einem Textfile, dass mehrer zusammengehörige Zeilen (Datenblöcke) enthält, einzelne Datenböcke suchen, ausschneiden und in einem neuen Textfile einfügen.

Dies ist ein Beispiel, wie es in der Textdatei vorkommt:

@Z 00002 000011 10
8509002 0 4 072257
8509004 0 3 072257
8509411 0 2 072257
8503225 0 6 072257
8503206 0 2 072257
8503202 0 6 072257
8503000 0 14 072257
8500010 2 9 072257
8509000 1 8 072257
8503209 0 3 072257
@Z 00002 085000 01
8008094 0 18 000030
8500010 1 9
8500090 0 5 083466
8014350 0 1 000030
8014277 0 4
8014228 0 3 000030
@Z 01110 80____ 01
8029034 0 9 053540
8014008 0 3 053540
@Z 01113 000022 02
8506210 1 12 000060

usw, Textdatei ca 30mb gross

Ein Datenblock geht immer von der @Z bis zur Zeile oberhalb der nächsten Zeile mit @Z
Also so:

@Z 00002 085000 01
8008094 0 18 000030
8500010 1 9
8500090 0 5 083466
8014350 0 1 000030
8014277 0 4
8014228 0 3 000030

Aus diesem Textfile möchte ich alle Datenblöcke, die ein 085000 beinhalten, ausschneiden und in ein anderes Textfile kopiern.

Das Batch sollte diese Operation solange durchführen, bis keine Datenblöcke mit 085000 vorhanden sind.

Leider habe ich keinen blassen Schimmer, wie ich dies angehen soll.

Hoffe jemand kann mir weiterhelfen.

Bei Unklarheitn einfach nachfragen. Besten Dank für eure Bemühungen.

Es grüsst Calimero



Mitglied: bastla
22.02.2013, aktualisiert um 18:40 Uhr
Hallo Calim3ro und willkommen im Forum!

Mit einem VBScript ließe sich das eleganter lösen als mit Batch:
01.
Ein = "Textfile.txt" 
02.
Aus = "Ausgeschnittene.txt" 
03.
Markierung = "Z" 
04.
Suche1 = "085000" 
05.
Suche2 = "000022" 
06.
 
07.
Set fso = CreateObject("Scripting.FileSystemObject") 
08.
T = Split(fso.OpenTextFile(Ein).ReadAll, Markierung) 
09.
Set A = fso.CreateTextFile(Aus) 
10.
 
11.
For Each Block In T 
12.
    If InStr(Block, Suche1) + InStr(Block, Suche2) > 0 Then A.Write Markierung & Block 
13.
Next
Zur Not könnte das Script auch von einem Batch (temporär) erzeugt werden.

Grüße
bastla

[Edit] Verwendung eines zweiten Suchbegriffs ergänzt [/Edit]
Bitte warten ..
Mitglied: Calim3ro
22.02.2013 um 17:05 Uhr
Hallo bastla

Wow, ging ja schnell! Habe es ausprobiert und funktioniert 1A.

Besten Dank dafür.

Gruss Calimero
Bitte warten ..
Mitglied: Calim3ro
22.02.2013 um 17:47 Uhr
Eine Frage habe ich allerdings noch:

Wie muss der vbs-Script angepasst werden, damit noch nach einer zweiten Nummer gesucht und den Block in das selbe Textfile kopiert? zB. 000022

Einfach den ersten Skript unter den ersten kopieren und Suche anpassen war leider nicht...

Danke für die Bemühungen.
Bitte warten ..
Mitglied: bastla
22.02.2013 um 18:42 Uhr
Hallo Calim3ro!

Habe oben eine (ungetestete) Anpassung vorgenommen.

Sollten es noch mehr Suchbegriffe werden, würde ich das allerdings etwas modifizieren ...

Grüße
bastla
Bitte warten ..
Mitglied: Calim3ro
22.02.2013 um 19:22 Uhr
Hallo bastla

Getestet und geht prima. Auch das hinzufügen von einer Suche3 klappt.

Aber es werden noch ca. 15 verschieden Suchzahlen hinzukommen.

Wie sähe da Deine Modifikation aus?

Besten Dank nochmal

Gruss Calimero
Bitte warten ..
Mitglied: bastla
22.02.2013 um 19:43 Uhr
Hallo Calim3ro!

Bei einer größeren Anzahl an Suchbegriffen könntest Du die folgende Variante testen (ich hab's nicht gemacht ):
01.
Ein = "Textfile.txt" 
02.
Aus = "Ausgeschnittene.txt" 
03.
Markierung = "Z" 
04.
Suche = Array("085000", "000022", "112233", "555555") 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
T = Split(fso.OpenTextFile(Ein).ReadAll, Markierung) 
08.
Set A = fso.CreateTextFile(Aus) 
09.
 
10.
For Each Block In T 
11.
    Gefunden = False 
12.
    For Each Suchwort In Suche 
13.
        If InStr(Block, Suchwort) > 0 Then 
14.
            Gefunden = True 
15.
            Exit For 
16.
        End If 
17.
    Next 
18.
    If Gefunden Then A.Write Markierung & Block 
19.
Next
Weitere Alternative: Eine Textdatei, die je ein Suchwort pro Zeile enthält, bereitstellen und am Scriptanfang einmalig in ein Array einlesen - das könnte dann so aussehen:
01.
Ein = "Textfile.txt" 
02.
Aus = "Ausgeschnittene.txt" 
03.
Markierung = "Z" 
04.
Suche = "Suchbegriffe.txt" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
T = Split(fso.OpenTextFile(Ein).ReadAll, Markierung) 
08.
S = Split(fso.OpenTextFile(Suche).ReadAll, vbNewline) 
09.
Set A = fso.CreateTextFile(Aus) 
10.
 
11.
For Each Block In T 
12.
    Gefunden = False 
13.
    For Each Suchwort In S 
14.
        If InStr(Block, Suchwort) > 0 Then 
15.
            Gefunden = True 
16.
            Exit For 
17.
        End If 
18.
    Next 
19.
    If Gefunden Then A.Write Markierung & Block 
20.
Next
Achtung: In der Datei "Suchbegriffe.txt" keine Leerzeilen (und auch keine Zeilenschaltung nach der letzten Zeile) verwenden!

Grüße
bastla
Bitte warten ..
Mitglied: Calim3ro
22.02.2013 um 20:12 Uhr
Hallo bastla

Habe mich für die zweite Version mit der "Suchbegriffe.txt" entschieden, damit bin ich flexibler falls noch welche dazukommen oder wegfallen.

Hat super geklappt! Danke Dir vielmal. Falls noch Fragen auftauchen, darf ich mich sicher wieder melden.

Bis dann...

Gruss Calimero
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

VB for Applications
gelöst VbScript: ADODB.Stream: Neue Zeile einfügen (2)

Frage von BirdyB zum Thema VB for Applications ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (57)

Frage von pjrtvly zum Thema Internet ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (23)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

DSL, VDSL
VDSL Signal via PowerLine an Fritzbox - Möglich? (19)

Frage von Seichobob zum Thema DSL, VDSL ...