[GastForen Programme Print/Bildbearbeitung Adobe InDesign Ist Variableninhalt ex- und importieren möglich?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Ist Variableninhalt ex- und importieren möglich?

Thomas W.
Beiträge gesamt: 21

26. Jan 2012, 14:52
Beitrag # 1 von 5
Bewertung:
(2554 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo und guten Tag,
ist es möglich den Variableninhalt zu ex- und importieren?

Buch synchronisieren nutze ich schon. Es geht mir darum die Variablen extern mit Inhalt zu füllen und dann in InDesign einzulesen.

Danke vorab
Thomas
X

Ist Variableninhalt ex- und importieren möglich?

Martin Fischer
  
Beiträge gesamt: 12783

26. Jan 2012, 15:11
Beitrag # 2 von 5
Beitrag ID: #488634
Bewertung:
(2547 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Thomas,

diese Frage ist vor einiger Zeit in Gibt es eine Möglichkeit Textvariablen extern zu definieren? diskutiert worden.

Dort verweist Peter Kahrel auf sein Skript variables.jsx.

Dort findet sich auch ein Verweis auf zwei InDesign CS3-Skripte im Premium-Forum, die ich nun hier anhänge. In CS4 und CS5 sind sie noch nicht getestet.

======================================

In <Gibt es eine Möglichkeit Textvariablen extern zu definieren?> wurde die Möglichkeit angefragt, Textvariablen extern zu definieren und bei Bedarf einzulesen.

Hier eine Skriptstudie, die diese Aufgabe zu lösen versucht.

Voraussetzung:
eine Textdatei, in der die benötigten Daten in folgender Struktur enthalten sind.

Code
Variablenname:Variableninhalt[Absatzschaltung] 

Beispiel (s. Anhang)

Code
// Textvariablen_benutzerdefiniert.jsx   
//DESCRIPTION: Befüllt Variablen mit benutzerdefiniertem Text über externe Liste
/*
Die Einträge in der Listendatei benötigen folgendes Format:
Variablenname:Variableninhalt[Absatzschaltung]
Unmittelbar nach dem Variablennamen folgt ein Doppelpunkt.
Direkt hinter diesem steht der Inhalt der Variable.
*/
var d = app.activeDocument;
// Ortung der Konfigurationsdatei
var myConfig = getData ( scriptDir () + '/' + 'config.txt' );
// Auslesen der Listendatei
var myData = getData ( myConfig.data );
// Zerlegung des Inhalts der Listendatei
var myArray = myData.data.split ( '\n' );

// Abarbeitung der Definitionszeilen
for ( i = 0; i < myArray.length; i++ )
setVar ( myArray[i]. split( ':' ) )

alert ( 'Fertig!' );

// ===============================================================
// Funktionen
// ===============================================================

// ----------------------------------------------------------------------------------------------
// Zuweisung der Variableninhalte
// ( ggf. Definition der Variablen )
// ----------------------------------------------------------------------------------------------
function setVar ( aPair )
{
var myName = aPair[0];
var myValue = aPair[1];
if ( myName.replace ( / +/g, '' ) == '' ) // Variablenname ist leer; z.B. bei Leerzeile
return;
try {
d.textVariables.item ( myName ).name; // Prüfung, ob Variable bereits existiert
var myVar = d.textVariables.item ( myName );
}
catch ( e ) { // die Variable existiert nicht => neu anlegen
var myVar = d.textVariables.add ( {name:myName, variableType:VariableTypes.CUSTOM_TEXT_TYPE} );
}
try {
myVar.variableOptions.contents = myValue; // Übergabe des Inhalts
} catch(e) {alert (e)};
}

// ----------------------------------------------------------------------------------------------
// Ortung des Skriptverzeichnisses
// ( für Skriptpalette und ESTK II )
// ----------------------------------------------------------------------------------------------
function scriptDir ()
{
try { return File ( app.activeScript ).path; }
catch ( e ) { return File ( e.fileName ).path; }
}

// ----------------------------------------------------------------------------------------------
// Auslesen des Inhalts einer übergebenen Textdatei
// ----------------------------------------------------------------------------------------------
function getData ( theFilePath )
{
var temp = '';
var theFile = new File ( theFilePath )
if (!theFile.exists ) // Datei nicht gefunden
{
var nf = new File;
var theFile = File.openDialog (); // Dialog zur Auwahl der Datei
if ( theFile == null ) // nichts ausgewählt => Ausstieg
exit ();
else // Datei ausgewählt => Festhalten in Config-Datei
{
writeData( theFile , File ( scriptDir () + '/' + 'config.txt' ) );
return { data:theFile };
}
}
theFile.open ( 'r', undefined, undefined );
//theFile.encoding = 'UTF-8';
var temp = theFile.read (); // Auslesen der Textdatei
theFile.close ();
return { data:temp, file:theFile };
}

// ----------------------------------------------------------------------------------------------
// Schreiben einer Textdatei
// ----------------------------------------------------------------------------------------------
function writeData ( aData, theFile )
{
theFile.open ( 'w', 'Text', 'R*ch' );
theFile.encoding = 'UTF-8';
theFile.write ( aData );
theFile.close ();
}


Das Skript prüft zunächst, ob sich in dem Verzeichnis, in dem es abgelegt ist, eine Datei 'config.txt', in welcher der Pfad zur Listendatei angegeben ist, findet.
Wenn nicht, dann wird der Pfad zur Listendatei über einen Dialog ermittelt und in einer neu angelegten 'config.txt' festgehalten.
Fortan ermittelt das Skript bei jedem Start den Pfad zur Listendatei mit den Defininitonen über diese config.txt. Bei Bedarf (Änderung des Pfads zur Listendatei) kann die config.txt einfach gelöscht werden.

Aus dieser Listendatei werden die Definitionen von Variablennamen und -inhalt ausgelesen.
Jeder Datensatz besteht aus einem Absatz und wird durch eine Absatzschaltung begrenzt.
Er besteht aus zwei Datenfeldern, die durch einen Doppelpunkt getrennt sind (siehe auch Anhang):
Code
Variablenname:Variableninhalt 



Existiert bereits eine Variable mit dem angegebenen Namen, wird diese verwendet und mit dem neuen Inhalt befüllt. Handelt es sich dabei nicht um den erwarteten Typ (benutzerdefinierter Text), erscheint eine Fehlermeldung - das Skript macht aber weiter.
Existiert diese Variable nicht, wird sie neu angelegt und dann mit dem Inhalt befüllt.


Und hier das Gegenstück zum Exportieren der Textvariablen mit benutzerdefiniertem Text:

Code
// TextvariablenExport.jsx 
//DESCRIPTION: Exportiert Variablen mit benutzerdefiniertem Text in externe Liste
/*
Die Einträge in der Listendatei erhalten folgendes Format:
Variablenname:Variableninhalt[Absatzschaltung]
*/
var d = app.activeDocument;
var myConfig = getData ( scriptDir () + '/' + 'config.txt' );
// Auslesen der Config-Datei
var myData = getData ( myConfig.data );
var myArray = new Array;
for ( i = 0; i < d.textVariables.length; i++ )
getUserdefinedVar (d.textVariables[i] )

writeData( myArray.join ( '\n' ), myData.file );
// alert ( 'Fertig!' );

// ===============================================================
// Funktionen
// ===============================================================

// ----------------------------------------------------------------------------------------------
// Sammeln der Variablen mit benutzerdefiniertem Text
// ----------------------------------------------------------------------------------------------
function getUserdefinedVar ( aVar )
{
if ( aVar.variableType != VariableTypes.CUSTOM_TEXT_TYPE)
return;
var aString = aVar.name + ':' + aVar.variableOptions.contents;
myArray.push( aString );
}

// ----------------------------------------------------------------------------------------------
// Ortung des Skriptverzeichnisses
// ( für Skriptpalette und ESTK II )
// ----------------------------------------------------------------------------------------------
function scriptDir ()
{
try { return File ( app.activeScript ).path; }
catch ( e ) { return File ( e.fileName ).path; }
}

// ----------------------------------------------------------------------------------------------
// Auslesen des Inhalts einer übergebenen Textdatei
// ----------------------------------------------------------------------------------------------
function getData ( theFilePath )
{
var temp = '';
var theFile = new File ( theFilePath )
if (theFilePath.match('config.txt') && !theFile.exists ) // Datei nicht gefunden
{
var nf = new File;
var theFile = File.openDialog (); // Dialog zur Auwahl der Datei
if ( theFile == null ) // nichts ausgewählt => Ausstieg
theFile = File ( scriptDir () + '/' + 'Textvariablen.txt' );
writeData( theFile , File ( scriptDir () + '/' + 'config.txt' ) );
return { data:theFile.fullName };
}
theFile.open ( 'r', undefined, undefined );
//theFile.encoding = 'UTF-8';
var temp = theFile.read (); // Auslesen der Textdatei
theFile.close ();
return { data:temp, file:theFile };
}

// ----------------------------------------------------------------------------------------------
// Schreiben einer Textdatei
// ----------------------------------------------------------------------------------------------
function writeData ( aData, theFile )
{
theFile.open ( 'w', 'Text', 'R*ch' );
theFile.encoding = 'UTF-8';
theFile.write ( aData );
theFile.close ();
}


Dieses Skript greift auf eine config.txt zurück (oder legt sie neu an), in welcher der Pfad zur Listendatei angegeben ist. Wenn beide Skripte im selben Verzeichnis sind, bedienen sie dieselbe Listendatei - rein und raus.


als Antwort auf: [#488631]
(Dieser Beitrag wurde von Martin Fischer am 26. Jan 2012, 15:13 geändert)

Anhang:
Textvariablen.txt (0.27 KB)

Ist Variableninhalt ex- und importieren möglich?

Thomas W.
Beiträge gesamt: 21

26. Jan 2012, 15:32
Beitrag # 3 von 5
Beitrag ID: #488635
Bewertung:
(2522 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Booaaah - toll !!

Vielen Dank Martin. Das Script von Peter Kahrel kenn und nutze ich schon intensiv. Aber das ist ja nur InDesign intern. Jetzt habe ich aber einen Weg rein und raus und kann meinem Entwicklungsgeist freien Lauf lassen.

Nochmal danke
Thomas


als Antwort auf: [#488634]

Ist Variableninhalt ex- und importieren möglich?

Martin Fischer
  
Beiträge gesamt: 12783

26. Jan 2012, 15:58
Beitrag # 4 von 5
Beitrag ID: #488641
Bewertung:
(2509 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Dann hat das verstaubte Skriptset also noch funktioniert.
In welcher InDesign-Version wendest Du es an?

So wie ich wieder etwas Zeit finde, werde ich es überarbeiten und ins Scriptarchiv stellen.


als Antwort auf: [#488635]

Ist Variableninhalt ex- und importieren möglich?

Thomas W.
Beiträge gesamt: 21

26. Jan 2012, 16:39
Beitrag # 5 von 5
Beitrag ID: #488646
Bewertung:
(2482 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zumindest das Script InDesign -> Textdatei läuft schon.

Nur // alert ( 'Fertig!' ); habe ich geändert in alert ( 'Fertig!' ); damit ich auch merke, das es was getan hat. ;-)

Das andere Script werde ich auch noch testen.

Vielen Dank nochmal
Thomas
Ach ja - CS5 hab ich.


als Antwort auf: [#488641]
(Dieser Beitrag wurde von Thomas W. am 26. Jan 2012, 16:39 geändert)
X