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

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, 2819 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...