Top-Themen

Aktuelle Themen (A bis Z)

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

Zeilen vor und nach Suchstring aus Text löschen

Frage Entwicklung Batch & Shell

Mitglied: echoloud

echoloud (Level 1) - Jetzt verbinden

15.02.2012 um 09:50 Uhr, 2844 Aufrufe, 5 Kommentare

Hallo liebe Forum-Mitglieder!

Ich hoffe Ihr könnt mir bei meinem Problem helfen:

Ich habe eine massive Textdatei (~70000 Zeilen) aus der ich nach einem bestimmten, multipel auftretenden String suchen und die 2 Zeilen vor dem String, 6 Zeilen nach dem String und die Zeile in der der String vorkommt aus dem Text löschen will. Ich habe schon vieles versucht, komme aber immer wieder auf eine Lösung mit 2 ineinander verschachtelten for-Schleifen und das ist bei dieser Filegröße mit einer sehr sehr langen Durchlaufzeit verbunden. Mir ist wohl klar, dass ein Batch nicht die idealste Lösung ist, aber ich brauche eine toolunabhängige und wenn möglich relativ schnelle Lösung.

Habt ihr vielleicht einen Geniestreich in der Hinterhand?

Vielen Dank schonmal im voraus, beste Grüße, echoloud
Mitglied: icsat
15.02.2012 um 13:08 Uhr
Hallo echoloud,

herzlich willkommen im Forum.

Ich würde an Deiner Stelle versuchen dieses Problem mit vbs zu lösen, da dies bei solchen Aufgaben/Datenmengen deutlich schneller ist als Batch.


Gruß icsAT
Bitte warten ..
Mitglied: echoloud
15.02.2012 um 13:25 Uhr
Hi icsAT,

noch nie damit gearbeitet, weißt Du zufällig ein gutes Tutorial?

LG
Bitte warten ..
Mitglied: icsat
15.02.2012 um 14:50 Uhr
Hallo echoloud,

leider kenne ich kein Tutorial zu dem Thema VB Script. Mir hilft da immer eine entsprechende Zeilen mit dem was ich machen will, wie z.B. "VBS Textdatei lesen", "VBS Textdatei schreiben", in eine Suchmaschine einzugeben und mir die Ergbnisse mal genauer anzusehen.

Deine Anforderung könnte man z.B. wie folgt lösen:
01.
Dim fso, fInput, fOutput 
02.
Dim strInputFileName, strOutputFileName, strInputLine(2), strSearch 
03.
Dim counter 
04.
 
05.
set fso = CreateObject("Scripting.FileSystemObject") 
06.
 
07.
strSearch = "suchstring" 
08.
 
09.
strInputFileName = "input.txt" 
10.
strOutputFileName = "output.txt" 
11.
 
12.
set fInput = fso.OpenTextFile(strInputFileName, 1) 
13.
set fOutput = fso.CreateTextFile(strOutputFileName, True, False) 
14.
 
15.
Do While fInput.AtEndOfStream <> True 
16.
   strInputLine(0) = fInput.ReadLine 
17.
   if InStr(strInputLine(0), strSearch) <> 0 then 
18.
      for counter = 1 to 6 
19.
         strInputLine(0) = fInput.ReadLine 
20.
         if InStr(strInputLine(0), strSearch) <> 0 then 
21.
            counter = 0 
22.
         end if 
23.
         if fInput.AtEndOFStream Then 
24.
            counter = 6 
25.
         end if 
26.
      next 
27.
      strInputLine(0) = "" 
28.
      strInputLine(1) = "" 
29.
      strInputLine(2) = "" 
30.
   else 
31.
      if strInputLine(1) = "" then 
32.
         strInputLine(1) = strInputLine(0) 
33.
      else 
34.
         if strInputLine(2) = "" then 
35.
            strInputLine(2) = strInputLine(1) 
36.
            strInputLine(1) = strInputLine(0) 
37.
         else 
38.
            if fInput.AtEndOfStream <> True then 
39.
               fOutput.WriteLine strInputLine(2) 
40.
               strInputLine(2) = strInputLine(1) 
41.
               strInputLine(1) = strInputLine(0) 
42.
            else 
43.
               fOutput.WriteLine strInputLine(2) 
44.
               fOutput.WriteLine strInputLine(1) 
45.
               fOutput.WriteLine strInputLine(0) 
46.
            end if 
47.
         end if 
48.
      end if 
49.
   end if 
50.
Loop 
51.
 
52.
fOutput.Close 
53.
fInput.Close 
54.
 
55.
set fInput = nothing 
56.
set fOutput = nothing 
57.
set fso = nothing
Ich habe dabei jetzt erst mal vernachlässigt, dass Du die Datei ersetzen willst und eine neue Datei mit dem Ergebnis erstellt.

Wenn Du Dich mit dem Thema auseinandersetzen willst würde ich Dir empfehlen mal die verwendeten Befehle in eine Suchmaschine einzugeben und Dir die Erklärungen dazu durchzulesen. Das wäre dann schon mal ein Einstieg, mit dem man viele Problemstellungen in diesem Bereich (Datei zeilenweise einlesen und ggf. modifiziert in eine neue Datei ausgeben) einfach lösen kann.


Viele Grüße icsAT
Bitte warten ..
Mitglied: echoloud
15.02.2012 um 16:14 Uhr
Wow, funktioniert einwandfrei und in Rekordzeit!! Schaut auch vom Programmieraufwand her sehr pasabel aus (ohne deine Leistung schmälern zu wollen). Batch adieu, VBS bienvenue!

Vielen Dank für Deine tolle Hilfe! LG echo
Bitte warten ..
Mitglied: icsat
15.02.2012 um 16:44 Uhr
Hallo echoloud,

gerne, wobei ich es persönlich meist nicht zielführend finde hier anderen komplett fertige Lösungen zu präsentieren, da imho häufig der Lerneffekt dadurch in Richtung Null geht. Da Du aber bisher noch nicht mit VB Script gearbeitet hast und ich Dir kein passendes Tutorial anbieten konnte habe ich gedacht ein Beispiel, dass Deine Anforderungen ungefähr erfüllt könnte ein guter Einstieg sein.

Zitat von echoloud:
Batch adieu, VBS bienvenue!

Das würde ich jetzt so nicht pauschal unterschreiben wollen! Meiner Meinung nach gibt es für beides seine Daseinsberechtigung.


Gruß icsAT
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Doppelte Zeilen in Text-Datei löschen
gelöst Frage von reckheimBatch & Shell15 Kommentare

Hallo ich schreibe lange Übersetzungsprogramme in FoxPro in unten folgender Text-Datei-Form. Die Datei ist allerdings durch Zusammenführung verschiedener Versionen ...

PHP
PHP - Text ab bestimmter Zeile löschen
gelöst Frage von tingelPHP4 Kommentare

Hallo, ich habe eine Textdatei, die immer neu erstellt wird, ähnlich aussieht, aber unterschiedlich lang. Auf den Inhalt der ...

Batch & Shell
Batsch doppelte Zeile in in Text finden und eine löschen
Frage von GNLen1Batch & Shell10 Kommentare

Hallo zusammen. Ich habe noch nicht so viel Erfahrung mit batch. Ich will eine Textdatei (oder optional alle Datein ...

Batch & Shell
Text von zeile mit wort, bis ziele mit wort
gelöst Frage von SaintwolfBatch & Shell5 Kommentare

suche eine Batch die eine txt auswertet inhalt: text a text b text c Fehler fehler in KB4568792 text ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 18 StundenMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 20 StundenDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 21 StundenSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke14 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Server-Hardware
Veeam Backup Server stürzt alle paar Tage ab
Frage von Leo-leServer-Hardware12 Kommentare

Hallo Forum, ich habe momentan folgendes Problem. Veeam Backup and Replication 9.5 u2 auf voll gepatchten DL 380 G7 ...

Windows 10
Windows10-Schnellzugriff per Kommandozeile bearbeiten
Frage von SarekHLWindows 1010 Kommentare

Hallo zusammen, weiß jemand, wie ich per Kommandozeile (in einem Logon-Script) den persönlichen Dokumentenordner aus dem Schnellzugriff entferne den ...