• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Script zum ersetzen von Laufnummer in Textdokumenten

MasterDomino

Roter Eiserapfel
Registriert
28.04.05
Beiträge
1.438
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
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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".
 
  • Like
Reaktionen: MasterDomino

MasterDomino

Roter Eiserapfel
Registriert
28.04.05
Beiträge
1.438
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
 

pi26

Adams Parmäne
Registriert
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
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Ist das irgendwie möglich?
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.
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Das sollte helfen:)
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

Exif Touch V0.03 schrieb:
-- leftfill of 4711 by "000000" => "004711"
to leftfill of aNumber by pattern
   set aNumber to aNumber as string
   set missing to (length of pattern) - (length of aNumber)
   if missing <= 0 then return aNumber
   return (text 1 thru missing of pattern) & aNumber
end leftfill
 

MasterDomino

Roter Eiserapfel
Registriert
28.04.05
Beiträge
1.438
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