1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Script zum ersetzen von Laufnummer in Textdokumenten

Dieses Thema im Forum "AppleScript" wurde erstellt von MasterDomino, 31.01.07.

  1. MasterDomino

    MasterDomino Roter Eiserapfel

    Dabei seit:
    28.04.05
    Beiträge:
    1.440
    Hallo liebe Apfeltalker!

    Ich kenne mich mit AppleScripts leider gar nicht aus, stehe aber jetzt vor einem Problem, dass sich mit einem Script vielleicht lösen lässt.

    Ich habe ein Textdokument, in dem folgende Textabfolge auftaucht:

    Irgendein Text , Animation_00001.pct
    Irgendein Text , Animation_00001.pct
    Irgendein Text , Animation_00001.pct
    Irgendein Text , Animation_00001.pct
    Irgendein Text , Animation_00001.pct


    Wobei "Irgendein Text" immer etwas verschiedenes ist.

    Nun muss ich dieses 00001 irgendwie in eine Laufnummer umwandeln, also so dass in der nächsten Zeile immer jeweils eine Nummer höher steht.

    Am Ende soll da also stehen:

    Irgendein Text , Animation_00001.pct
    Irgendein Text , Animation_00002.pct
    Irgendein Text , Animation_00003.pct
    Irgendein Text , Animation_00004.pct
    Irgendein Text , Animation_00005.pct



    Ist das irgendwie mit einem AppleScript zu bewerkstelligen? Oder sonst irgendwie?
    Der Inhalt des Textdokumentes müsste ja abgefragt werden, ich bin mir nicht mal sicher, ob das geht.

    Kann mir da jemand weiterhelfen?

    Vielen Dank im Voraus!


    Gruß, MasterDomino
     
  2. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Code:
    perl -i.bak -pe '$i=$i?$i+1:1;s/(\d+)/sprintf "%0".length($1)."d",$i/ge' irgendeinetextdatei.txt
    
    Das im Terminal eingegeben. Das erzeugt Dir eine neue "irgendeinetextdatei.txt" und eine alte "irgendeinetextdatei.txt.bak".
     
    MasterDomino gefällt das.
  3. MasterDomino

    MasterDomino Roter Eiserapfel

    Dabei seit:
    28.04.05
    Beiträge:
    1.440
    Hallo Skeeve!

    Also erst einmal vielen, vielen Dank, dass du dich meines Problemes angenommen hast.

    Ich muss allerdings gestehen, dass ich mich etwas ungenau ausgedrückt hatte. Dein Script funktioniert an sich wunderbar, allerdings nur für das oben angegebene Beispiel (deshalb meine ich, dass ich mich ungenau ausgedrückt habe...).

    Das Problem ist, dass dein Script anscheinend nach Zeilennummer funktioniert. Bei meiner Textdatei kann es aber so sein, dass diese Textabfolge in einer beliebigen Zeile auftaucht. Allerdings muss das erste dann immer noch 00001.pct bleiben und das zweite muss zu 00002.pct werden. Auch wenn es in den Zeilen 7 und 8 steht.

    Es geht übrigens um sogenannte .stl-Dateien, die man beim Untertitelimport beim DVD-Authoring in DVD Studio Pro benötigt. Nur damit es mal etwas konkreter wird.

    Zum besseren Verständnis kopiere ich hier mal eine Originaltextdatei rein (konnte ich heute nachmittag noch nicht machen, da ich keinen Zugang zu der Datei hatte).

    So sieht die Datei aus:

    // Do not change this line %sftVersion = STL (Spruce Text List).
    // Do not change this line %sftFrameRate = 25
    // Do not change this line %sftNDF = NDF
    // Do not change this line %sftVideoSize = 720 576


    $SetFilePathToken = <<Image>>
    $ForceDisplay = True
    $TapeOffset = False

    00:00:08:00 , 00:00:08:02 , <<Image>>Comp_1_00001.pct
    00:00:08:02 , 00:00:08:04 , <<Image>>Comp_1_00001.pct
    00:00:08:04 , 00:00:08:06 , <<Image>>Comp_1_00001.pct
    00:00:08:06 , 00:00:08:08 , <<Image>>Comp_1_00001.pct
    00:00:08:08 , 00:00:08:10 , <<Image>>Comp_1_00001.pct
    00:00:08:10 , 00:00:08:12 , <<Image>>Comp_1_00001.pct
    00:00:08:12 , 00:00:08:14 , <<Image>>Comp_1_00001.pct
    00:00:08:14 , 00:00:08:16 , <<Image>>Comp_1_00001.pct
    00:00:08:16 , 00:00:08:18 , <<Image>>Comp_1_00001.pct
    00:00:08:18 , 00:00:08:20 , <<Image>>Comp_1_00001.pct
    00:00:08:20 , 00:00:08:22 , <<Image>>Comp_1_00001.pct
    00:00:08:22 , 00:00:08:24 , <<Image>>Comp_1_00001.pct



    Man sieht also, dass da auch einige andere Dinge, wie zum Beispiel der Timecode links drin sind und der darf auf gar keinen Fall verändert werden.

    Ist es daher möglich in solch einer Textdatei nur dieses 00001 in eine fortlaufende Nummer zu verwandeln?


    Natürlich könnte ich aus dem Dokument oben auch einfach mit Textedit dieses Dokument machen

    // Do not change this line %sftVersion = STL (Spruce Text List).
    // Do not change this line %sftFrameRate = 25
    // Do not change this line %sftNDF = NDF
    // Do not change this line %sftVideoSize = 720 576


    $SetFilePathToken = <<Image>>
    $ForceDisplay = True
    $TapeOffset = False

    00:00:08:00 , 00:00:08:02 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:02 , 00:00:08:04 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:04 , 00:00:08:06 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:06 , 00:00:08:08 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:08 , 00:00:08:10 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:10 , 00:00:08:12 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:12 , 00:00:08:14 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:14 , 00:00:08:16 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:16 , 00:00:08:18 , <<Image>>Comp_1_SIGNALWORT.pct
    00:00:08:18 , 00:00:08:20 , <<Image>>Comp_1_SIGNALWORT.pct


    falls das die Sache irgendwie vereinfachen sollte (sind ja leider schon genug Nullen in dem Dokument) so müsste man dann nur das Wort SIGNALWORT mit der fortlaufenden fünfstelligen Nummer ersetzen.

    Ist das irgendwie möglich?

    Wäre absolut großartig falls es da eine Möglichkeit gäbe!

    Danke!

    Gruß, MasterDomino
     
  4. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    Hallo,

    Das sollte helfen:)

    Code:
    tell application "TextEdit"
    	set nr to 1
    	tell document 1
    		repeat with i from 1 to count of paragraphs
    			if last word of paragraph i begins with "Animation_" then
    				set last word of paragraph i to ("Animation_" & nr as text) & ".pct"
    				set nr to nr + 1
    			end if
    		end repeat
    	end tell
    end tell
    
    mfg pi26
     
  5. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Klar.
    Code:
    perl -i.bak -pe '$i||=1;s/_(\d+)\.pct/sprintf "_%0".length($1)."d.pct",$i++/ge' irgendeinetextdatei.txt
    Das sucht jetzt nach "_" gefolgt von Ziffern gefolgt von ".pct" und ersetzt die Ziffern durch eine laufende Nummer mit genausoviel Stellen, wie Ziffern gefunden wurden.

    Also wenn du da mal _001.pct stehen hast, wird der Zähler dreistellig. Das kann auch mitten in einem Lauf geschehen, da die Anzahl der stellen jedesmal neu berechnet wird.

    Es wird aber alles an Ziffern zwischen "_" und ".pct" genommen. Also auch _1234.pct würde rigoros zu "_0001.pct" wenn es als erstes auftaucht.
     
  6. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Ich habe es nicht getestet, aber kann es sein, daß die Nummer nicht mit Nullen auf genügend Stellen aufgefüllt wird?

    Hier ein Handler den ich für sowas mal geschrieben habe. Statt die nr nur anzufügen müßtest Du die gefundene Zahl (00001) mitgeben. also:
    leftfill of nr by gefundeneZahl

     
  7. MasterDomino

    MasterDomino Roter Eiserapfel

    Dabei seit:
    28.04.05
    Beiträge:
    1.440
    Wow!

    Vielen, vielen Dank euch beiden!

    Also das von dir, Skeeve, funktioniert jetzt einwandfrei, das von pi26 werde ich aber später natürlich auch noch ausprobieren.

    @skeeve: Würdest du mir erlaube, dieses Script im Forum von http://www.finalcutprofi.de zu posten? Natürlich mit Verweis auf dich, ich will mich da nicht mit fremden Lorbeeren schmücken. Da diskutieren wir nämlich gerade das Problem animierte Untertitel zu erstellen und in diesem Zusammenhang ist das Script sehr nützlich.


    Gruß, MasterDomino
     
  8. MasterDomino

    MasterDomino Roter Eiserapfel

    Dabei seit:
    28.04.05
    Beiträge:
    1.440
    Darf ich?
     
  9. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Mach mal.
     
  10. MasterDomino

    MasterDomino Roter Eiserapfel

    Dabei seit:
    28.04.05
    Beiträge:
    1.440
  11. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Und? Schon gepostet?
     

Diese Seite empfehlen