// DESCRIPTION Test readFileInstances
// Dateiname: readFileInstances.jsx
// © 2013 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// created: Fri Sep 27 2013 07:04:24 GMT+0200
#target indesign
String.prototype.fill = function(number){var filled ="";for (var i=0;i<number;++i){filled += this;}return filled;}
String.prototype.padLeft = function(fillc, length)
{if (this.length<length){return (fillc.fill(length-this.length)+this).substr(-length);}return this;}
/*string*/ String.prototype.splitFileName=function()
{
var file = new File(this);
var fn =file.name;
var extension = "";
if (fn.lastIndexOf(".",fn)>0)
{
extension = fn.substr(fn.lastIndexOf(".",fn));
fn=fn.substr(0,fn.lastIndexOf(".",fn));
}
return {path: file.path, fileNameWithExtension: file.name, fileNameWithOutExtension: fn, extension: extension}
}
// globales Object:
var gO = {};
main();
/*string*/function readFileInstances(/*string*/fileName, /*int*/multiInstances)
{
if (multiInstances==null)
{
gO.logFileName = fileName;
return fileName;
}
// split fileName and remove leading figures
var splittetFileName = fileName.splitFileName(true);
var lengthOfMultininstances = multiInstances.toString().length;
var files = new Array()
for (var i = multiInstances; i>=0; i--)
{
var file = new File(File(splittetFileName.path+ "/" +i.toString().padLeft("0",lengthOfMultininstances) + splittetFileName.fileNameWithExtension).fullName);
if (file.exists) files.push(file);
}
if (files.length >= multiInstances)
{
// delete highest
files[0].remove();
}
// rename all existing files
for (var i = (files.length-1); i>-1; i--)
{
var file = new File(splittetFileName.path+ "/" +(i+1).toString().padLeft("0",lengthOfMultininstances) + splittetFileName.fileNameWithExtension);
if (file.exists)
{
// full name, this is the used way, which works with windows
file.rename(splittetFileName.path+ "/" +(i+2).toString().padLeft("0",lengthOfMultininstances) + splittetFileName.fileNameWithExtension)
// only file name
file.rename((i+2).toString().padLeft("0",lengthOfMultininstances) + splittetFileName.fileNameWithExtension)
}
}
fileName = splittetFileName.path+ "/" +(1).toString().padLeft("0",lengthOfMultininstances) + splittetFileName.fileNameWithExtension;
gO.logFileName = fileName;
return fileName;
}
/*void*/function main()
{
try
{
var dlgWin = createDialogWindow();
dlgWin.show();
/*dialogWindow*/function createDialogWindow()
{
try
{
var dlgWin = new Window("dialog", "Test der Funtion readFileInstances");
dlgWin.targetFolder = null;
dlgWin.counter = 0;
dlgWin.multiInstances = 10;
dlgWin.baseFileName = "Protokolldatei.log";
dlgWin.fileName = dlgWin.baseFileName;
dlgWin.mlEdit = addMultilineEdit(dlgWin);
dlgWin.mlEdit.text = "Jeder Klick erzeugt eine Datei, in diesem Fall maximal 10.\n";
dlgWin.mlEdit.text += "bei Überschreitung dieser Zahl wird die älteste Version gelöscht.\n";
dlgWin.mlEdit.text += "Bei jedem Aufruf der Funktion wird der Zähler in den Dateien inkrementiert "+
dlgWin.mlEdit.text += "und die Dateien entsprechend umbenannt, damit die neueste Version " +
dlgWin.mlEdit.text += "immer in der ersten Datei steht. \n Rückgabewert ist der Dateiname der neuesten Datei: \n\n\n";
var buttons = [
{name: "tfolder", text: "Zielverzeichnis", helpTip: "Zielverzeichnis auswählen", onClick: getTargetFolder},
{name: "save", text: "Datei erzeugen", helpTip: "eine weitere Datei erzeugen", onClick: newFile},
{name: "close", text:"Ok", helpTip: "Fenster schließen", onClick: dlgWinClose}];
dlgWin.btnGroup = addButtonGroup(dlgWin, "panel", buttons);
dlgWin.onShow=function()
{
getTargetFolder();
}
/*void*/function getTargetFolder()
{
var folder = Folder(Folder.myDocuments);
var tF = folder.selectDlg("Zielverzeichnis auswählen:");
if (tF == null)
dlgWin.targetFolder = Folder.myDocuments;
else
dlgWin.targetFolder = tF.fullName;
dlgWin.baseFileName = dlgWin.targetFolder+"/" + dlgWin.baseFileName;
return ;
}
/*void*/function newFile()
{
if (dlgWin.targetFolder != null)
{
dlgWin.fileName = readFileInstances(dlgWin.baseFileName, dlgWin.multiInstances);
if (writeString2File(dlgWin.fileName, (++dlgWin.counter).toString()+"\n"))
{
dlgWin.mlEdit.text += dlgWin.fileName+"\n";
}
}
else
{
alert("Bitte zuerst ein Zielverzeichnis auswählen!");
}
return;
}
/*void*/function dlgWinClose()
{
dlgWin.close()
dlgWin = null;
gO = null;
readFileInstances = null;
}
}
catch (error)
{
throw error;
}
return dlgWin;
}
}
catch (error)
{
alert(error.message + "\ninZeile: " + error.line);
}
/*Object*/function addMultilineEdit(/*object*/toAdd, /*Array*/alignment, /*boolean*/ scrolling, /*boolean*/ enabled)
{
if (enabled == null)
enabled = true;
if (scrolling==null)
scrolling = true;
if (alignment== null)
alignment = ["fill","fill"];
var edText = toAdd.add("edittext", undefined, "", {multiline:true, scrolling: scrolling});
edText.alignment = alignment;
edText.enabled = enabled;
return edText;
}
/*Object*/function addButtonGroup(/*object*/toAdd, /*String*/winPanel, /*Array*/buttons)
{
// addPanelOrGroup(toAdd, [type], [orientation], [alignment], [text], [helpTip], [name]) ;
var bG = addPanelOrGroup(toAdd, "panel", "row", ["center","bottom"], null, null, winPanel) ;
// bG.buttons = new Array(buttons.length);
// bG.buttons = new Array(buttons.length);
bG.buttons = {};
for (var i = 0; i < buttons.length; i++)
{
bG.buttons[i] = {name: buttons[i].name, btn: bG.add("button", undefined, buttons[i].text)};
if (buttons[i].width>0)
bG.buttons[i].btn.maximumSize[0] = buttons[i].width;
bG.buttons[i].btn.helpTip = buttons[i].helpTip;
bG.buttons[i].btn.onClick = buttons[i].onClick;
eval("bG.buttons."+buttons[i].name + "= null");
bG.buttons[buttons[i].name] = bG.buttons[i].btn;
}
return bG;
}
/*Panel/Group*/function addPanelOrGroup(/*object*/toAdd, /*String*/type, /*string*/orientation, /*Array*/alignment,
/*string*/text, /*string*/helpTip, name)
{
// addPanelOrGroup(toAdd, [type], [orientation], [alignment], [text], [helpTip], [name]) ;
if (text == null)
var groupPanel = toAdd.add(type);
else
var groupPanel = toAdd.add(type, undefined, text);
groupPanel.name = text;
if (orientation==null)
orientation = "column"
if (alignment == null)
alignment = ["left","top"];
groupPanel.alignment = alignment;
groupPanel.orientation = orientation;
if (helpTip!=null)
groupPanel.helpTip = helpTip;
if (name!=null)
groupPanel.name = name;
return groupPanel;
}
/*bool*/function writeString2File(fileName, string2Write, encoding)
{
try // writeString2File
{
var file = File (fileName);
if (file==null)
throw new Error("Konnte das Dateiobject nicht erzeugen: \n" + fileName);
if (encoding==null)file.encoding = "UTF-8";
else file.encoding=encoding;
if (!file.open("w"))
throw new Error("Konnte Datei nicht zum schreiben öffnen: \n" + fileName);
if (!(file.write(string2Write)))
throw new Error("Konnte Dateiinhalt nicht schreiben: \n" + fileName);
if (!(file.close()))
{
throw new Error("Konnte Datei nicht schließen: \n" + fileName);
}
return true;
}
catch (error) // writeString2File
{
throw error;
}
return false;
}
}