ironhead-hayns
Goto Top

Script für die Editierung einer .txt Datei

Hallo zusammen freut mich nun auch auf administrator.de dabei zu sein.

Ich habe ein Problem mit einer Txt Datei die ich nach User(Chef) Vorgaben automatisch via .bat oder .vbs (oder was auch immer hilft) editieren muss.Die Datei sieht wie folgt aus:
JOB D1011000

/* STONE-AUSLESEN DER FILECOUNT DATEI

RUN DAILY

RELEASE ADD(D1011001)

ENDJOB

JOB D1011001

/* STONE-ÄNDERN DER FILECOUNT DATEI

CCCHK RC(0:1) OK

RUN DAILY

RELEASE ADD(D1011998)

ENDJOB

Die Anzahl der Einträge(JOB...bis ENDJOB) kann stark variieren für Beispiel habe ich nur 2 Einträge ausgewählt, man sieht das diese Datei bis JOB 998 geht.
So nun zur Herausforderung: Alles was hinter dem /* steht muss mit einem"." hinter dem Eintrag in der Zeile darüber kopiert werden.Sodass diese so aussieht:JOB D1011000.STONE-AUSLESEN DER FILECOUNT DATEI

So das geht ja noch!! Dies hat allerdings zur Folge, das die oder der "RELEASE ADD" Eintrag der zum JOB Eintrag gehört genauso angepasst werden muss.Spricht müssten diese Einträge wie folgt geändert werden:RELEASE ADD(D1011001.STONE-ÄNDERN DER FILECOUNT DATEI)
Leider gibt es manchmal zum Job nur einen "RELEASE...." Eintrag manchmal aber auch mehrere.
Also soll meine Beispiel Datei nacher so aussehen:

JOB D1011000.STONE-AUSLESEN DER FILECOUNT DATEI

/* STONE-AUSLESEN DER FILECOUNT DATEI

RUN DAILY

RELEASE ADD(D1011001.STONE-ÄNDERN DER FILECOUNT DATEI)

ENDJOB

JOB D1011001.STONE-ÄNDERN DER FILECOUNT DATEI

/* STONE-AUSLESEN DER FILECOUNT DATEI

CCCHK RC(0:1) OK

RUN DAILY

RELEASE ADD(D1011998.ENDEVERARBEITUNG)

ENDJOB

Ich bin dabei mit meinem Batch Kenntnissen ziemlich schnell an Grenzen gestoßen. Ich denke mir das es Batch bald nicht geht. Ich habe aber leider leider in vbs oder Powershell oder sonst was keinerlei Erfahrungen. Ich danke euch schon mal vorab für eure Anregungen und Vorschläge!!!

Content-Key: 186523

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

Printed on: April 24, 2024 at 20:04 o'clock

Member: Edi.Pfisterer
Edi.Pfisterer Jun 15, 2012 at 08:18:54 (UTC)
Goto Top
Hallo!
gerne würde ich Dir helfen, wenn ich nur die Vorgabe verstünde...

konkrete Frage:
unter welchen Umständen wird aus
release add

RELEASE ADD(D1011001.STONE-ÄNDERN DER FILECOUNT DATEI)
bzw.
RELEASE ADD(D1011998.ENDEVERARBEITUNG)

lg
Member: Ironhead-Hayns
Ironhead-Hayns Jun 15, 2012 at 08:44:41 (UTC)
Goto Top
Hallo ja stimmt das geht nicht wirklich eindeutig hervor.
Also das was hinter Job steht ist der Jobname! Dieser soll angepasst werden also von
Jobname:D1011001 nach Jobname:D1011001.STONE-ÄNDERN DER FILECOUNT DATEI
(Sinn der Aktion ist mir nicht ganz klar, soll aber wohl der Übersichtlichkeit dienen, damit Chef durchblicken kann)

Die Jobs dienen einem "anderen Programm" als Information welche Jobs zur sequentiellen Verarbeitung für heute dran sind, und welcher Job nach welchem Job läuft(RELEASE ADD (Jobname)) . Daher dient der Release Eintrag dem "anderen Programm" als Information welcher Job als nächstes dran ist. Da sich der Jobname ändert, findet das "andere Programm" nun unter (D1011001) nichts mehr da der Jobname nun D1011001.STONE-ÄNDERN DER FILECOUNT DATEI ist. Ergo die RELEASE ADD Eintrage müssen also genauso angepaast werden wie der JOB Eintrag. Der Rest ändert sich nicht.
Member: Edi.Pfisterer
Edi.Pfisterer Jun 18, 2012 at 09:13:48 (UTC)
Goto Top
Hallo!
ich habe jetzt zwar immer noch nicht herausgefunden, wann "auslesen der Filecount" bzw. "ändern der Filecount" bzw. "Ender der Verarbeitung" stehen soll....

wie dem auch sei:
abgesehen davon müsste folgendes funktionieren:

datei = "text.txt"  
datei1 = "neuetext.txt"  

Set fs = CreateObject("Scripting.FileSystemObject")  

Set File = fs.OpenTextFile(datei , 1, true)
        Do While not file.AtEndOfStream
                           zeile = (file.ReadLine)
                           
                           If InStr(zeile,"JOB ") >=1 Then   
                           Zeiletemp = zeile
                           Zeile = ""  
                           End If
                           
                                       
                           If InStr(zeile,"/* ") >=1 Then   
                           zeile = zeiletemp & zeile & vbCrLf & zeile
                           
                           End If
                           
                           If InStr(zeile,"RELEASE ADD") >=1 Then  
                           zeile = Replace(zeile, ")",".STONE-ÄNDERN DER FILECOUNT DATEI)")  
                           End if
                           
                           If Len(zeile) >= 1 Then
                           ausgabe = ausgabe & zeile & vbCrLf
                           End if
          
        Loop
        

set dateineu = fs.createtextfile(datei1, true)
dateineu.write  ausgabe

Sollte dem so sein, dann schließ mich bitte in Dein Abendgebet ein... face-wink

lg
Edi
Member: Ironhead-Hayns
Ironhead-Hayns Jun 18, 2012 at 13:06:01 (UTC)
Goto Top
Hallo Edi,
vielen Dank ich tüftel mal weiter, und gebe dann Info!!
Member: Edi.Pfisterer
Edi.Pfisterer Jun 18, 2012 at 13:27:48 (UTC)
Goto Top
Btw.
Der code ist .vbs
und du musst nur die ersten 2 zeilen ausbessern, zum tüfteln sollte es da eigentlich nichts mehr geben, der code funktioniert.
Lg