echoloud
Goto Top

Zeilen vor und nach Suchstring aus Text löschen

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

Content-ID: 180552

Url: https://administrator.de/contentid/180552

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

icsat
icsat 15.02.2012 um 13:08:43 Uhr
Goto Top
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
echoloud
echoloud 15.02.2012 um 13:25:20 Uhr
Goto Top
Hi icsAT,

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

LG
icsat
icsat 15.02.2012 um 14:50:25 Uhr
Goto Top
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:
Dim fso, fInput, fOutput
Dim strInputFileName, strOutputFileName, strInputLine(2), strSearch
Dim counter

set fso = CreateObject("Scripting.FileSystemObject")  

strSearch = "suchstring"  

strInputFileName = "input.txt"  
strOutputFileName = "output.txt"  

set fInput = fso.OpenTextFile(strInputFileName, 1)
set fOutput = fso.CreateTextFile(strOutputFileName, True, False)

Do While fInput.AtEndOfStream <> True
   strInputLine(0) = fInput.ReadLine
   if InStr(strInputLine(0), strSearch) <> 0 then
      for counter = 1 to 6
         strInputLine(0) = fInput.ReadLine
         if InStr(strInputLine(0), strSearch) <> 0 then
            counter = 0
         end if
         if fInput.AtEndOFStream Then
            counter = 6
         end if
      next
      strInputLine(0) = ""  
      strInputLine(1) = ""  
      strInputLine(2) = ""  
   else
      if strInputLine(1) = "" then  
         strInputLine(1) = strInputLine(0)
      else
         if strInputLine(2) = "" then  
            strInputLine(2) = strInputLine(1)
            strInputLine(1) = strInputLine(0)
         else
            if fInput.AtEndOfStream <> True then
               fOutput.WriteLine strInputLine(2)
               strInputLine(2) = strInputLine(1)
               strInputLine(1) = strInputLine(0)
            else
               fOutput.WriteLine strInputLine(2)
               fOutput.WriteLine strInputLine(1)
               fOutput.WriteLine strInputLine(0)
            end if
         end if
      end if
   end if
Loop

fOutput.Close
fInput.Close

set fInput = nothing
set fOutput = nothing
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
echoloud
echoloud 15.02.2012 um 16:14:34 Uhr
Goto Top
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
icsat
icsat 15.02.2012 um 16:44:50 Uhr
Goto Top
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