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, 2510 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...