Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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, 2834 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
Batsch doppelte Zeile in in Text finden und eine löschen (10)

Frage von GNLen1 zum Thema Batch & Shell ...

Batch & Shell
gelöst In allen Textdateien eines bestimmten Pfades die Zeilen x bis Ende löschen (2)

Frage von Schloth zum Thema Batch & Shell ...

VB for Applications
gelöst Vbscript bestimmte Zeile ungeachtet der Nummerierung löschen (4)

Frage von aletri zum Thema VB for Applications ...

Microsoft Office
gelöst Excel: viele leere Zeilen zwischendurch - effizient löschen? (9)

Frage von PixL86 zum Thema Microsoft Office ...

Neue Wissensbeiträge
Viren und Trojaner

FinFisher: Internetprovider schieben Spitzelopfern Malware unter

(1)

Information von kaiand1 zum Thema Viren und Trojaner ...

Humor (lol)

Wo ist der Fehler auf dem Bild?

(17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Update

Offenbar erneutes MS-Update mit Fehlerschleife (2012 R2)

Information von VGem-e zum Thema Windows Update ...

Heiß diskutierte Inhalte
Lizenzierung
Programm soll in verschiedenen Versionen lizenziert sein (20)

Frage von Yanmai zum Thema Lizenzierung ...

Humor (lol)
Wo ist der Fehler auf dem Bild? (17)

Information von the-buccaneer zum Thema Humor (lol) ...

Windows Userverwaltung
Ordner-Rechte für Dom.Admin einschränken? (13)

Frage von kilobyte zum Thema Windows Userverwaltung ...