Lade...
 

FrameMaker ExtendScript

Tabluator auf Zeichencode 8?

Will man eine Textdatei als Tabelle in FrameMaker importieren, wählt man als manuellen Weg das Menü Datei > Import und stellt entsprechende Parameter in den folgenden Dialog ein. Dies ist mittels ExtendScript auch in einem automatisierten Workflow möglich.
Probleme bereitet dies dann, wenn man eine Textdatei importieren möchte, in der die einzelnen Felder durch Tabulatoren getrennt sind. Der Tabulator liegt im Unicode-Zeichensatz auf dem Zeichencode 9 und kann nicht nur mit JavaScript mittels \t in einem String angegeben werden (siehe Zeile 1 im folgenden Snippet).
Allerdings führt diese Angabe als Wert für den Importparameter FS_CellSeparator (Zeile 11) zu keinem Erfolg. Die Lösung des Problems wirft uns in die Urzeiten von FrameMaker (vor der Version 8) zurück. Hier verwendete FrameMaker mit FrameRoman eine eigene Kodierung der Zeichen, und dort lag der Tabular auf dem Zeichencode 8. Sobal dieser Zeichencode übergeben wird (siehe Zeile 4), erhält man das gewünschte Ergebnis.
Textdatei importieren
  1 . var separator = "\t";
  2 . //use internal char enconding for tabs
  3 . if (separator=="" || separator=="\t")
  4 .   separator = 0x8;
  5 . 
  6 . var filename = "C:\\temp\\textfile.txt"
  7 . var doc = app.ActiveDoc
  8 . var importParams = GetImportDefaultParams();
  9 . var returnParams = new PropVals() ;
 10 . //... set other import parameters here
 11 . SetPropVal (Constants.FS_CellSeparator, separator, importParams);
 12 . doc.Import (doc.TextSelection.end , filename, importParams, returnParams)
 13 . 
 14 . function SetPropVal (prop, propval, params)
 15 . {
 16 .   var i = GetPropIndex(params, prop);
 17 .   if (i < 0) 
 18 .     return false ;
 19 .   if (typeof(propval) == 'number')
 20 .     params[i].propVal.ival  = propval;
 21 .   if (typeof(propval) == 'string')
 22 .     params[i].propVal.sval  = propval;
 23 .   return true;
 24 . }
Ich vermute, dass das Problem auch an anderen Stellen zum Vorschein kommen wird und auch noch andere Zeichen wie CarriageReturn und Linefeed betroffen sein werden.
Eine Gegenüberstellung der FrameRoman Kodierung zum ANSI-Zeichensatz findet sich im charater_sets.pdf(externer Link) ab Seite 6
veröffentlicht am 23 10 2011
Drucken