[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Datei mit write zeilenweise ändern

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

Datei mit write zeilenweise ändern

JeT
Beiträge gesamt: 40

4. Jul 2018, 21:34
Beitrag # 1 von 4
Bewertung:
(1732 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich habe ein komplexeres Script, in das ich nun eine Konfigurationsdatei einbauen möchte, die über einen Dialog dann je nach Häkchen geändert wird.

Ich habe jetzt einen funktionierenden Ansatz, wie ich die Datei zeilenweise ändern kann

Code
    function setConfig(pos, str) { 
var pos = pos-1;
var cfgFile = new File(confFile);

if (cfgFile.exists == true) {
var content = [];

cfgFile.open('r');
cfgFile.encoding = 'UTF-8';
while (!cfgFile.eof) {
content.push(cfgFile.readln());
}
cfgFile.close();

content[pos] = str;
cfgFile.open('w');
cfgFile.encoding = 'UTF-8';
for (var i=0; i < content.length; i++)
cfgFile.writeln(content[i]);
cfgFile.close();

}
}


Muss das wirklich so umständlich sein?

Ich hatte es vorher anders umgesetzt, nämlich, dass ich die Datei bis zur entsprechenden Zeile auslese und dann per write() ersetze – das funktioniert aber nur solange, wie neue und alte Zeile gleich lang sind... ist die Zeile kürzer bleibt was vom alten Text übrig, oder länger ersetze ich auch über die Zeile hinaus.

Danke für euer Feedback
Jens

(Dieser Beitrag wurde von JeT am 4. Jul 2018, 21:36 geändert)
X

Datei mit write zeilenweise ändern

WernerPerplies
Beiträge gesamt: 2762

5. Jul 2018, 07:21
Beitrag # 2 von 4
Beitrag ID: #564744
Bewertung:
(1702 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

warum willst Du die Datei zeilenweise ändern?

Lese die Datei konplett ein, ändere sie und schreibe sie komplett als String raus.

Einstellungen erzeugt man heute üblicherweise im JSON-Format.

Da erzeugst Du für die Einstellungen ein JavaScript-Object oder ein Array, wandelst Objekt oder Array in das JSON-Format um und schreibst das Ganze als String raus.

Umgekehrt liest Du den String, wandelst das Format und hast wieder ein Object oder Array.

Für all das gibt es fertige Routinen.

Such mal nach JSON.parse() und JSON.stringify().

Als Ergebnis erhältst Du eine wohlstrukturierte Textdatei:

Code
// Voreinstellungsdatei für WpsPdfProExport, Skript von Werner Perplies, EDV-Anwendungsberatung, https://weepee.de, e-mail: werner.perplies@weepee.de 
// Achtung! - Änderungen in dieser Datei können zu einer Fehl- oder Nichtfunktion des Skriptes führen.
[
{
"name": "WpsPdfProExportLocation",
"value": {
"x": 150,
"y": 150
}
},
{
"name": "WpsPdfProExportSize",
"value": {
"w": 705,
"h": 707
}
},
{
"name": "wpsPdfProExportLocation",
"value": {
"x": 150,
"y": 150
}
},
{
"name": "wpsPdfProExportSize",
"value": {
"w": 769,
"h": 400
}
},
{
"name": "attachedPdfServer",
"value": {
"server01": {
"folderS": "~/Source/Workspaces/WpsCSharpProjects/WpsPdfProServer/wpsPdfServer/server01",
"name": "server01",
"config": {

},
"runningServers": [

]
},
"server02": {
"folderS": "~/Source/Workspaces/WpsCSharpProjects/WpsPdfProServer/wpsPdfServer/server02",
"name": "server02",
"config": {

},
"runningServers": [
{
"folderS": "~/Source/Workspaces/WpsCSharpProjects/WpsPdfProServer/wpsPdfServer/server02",
"name": "server02",
"config": {

},
"exportFormat": "ExportFormat.PDF_TYPE"
}
]
}
}
},
{
"name": "lastSelectedPdfServerFolder",
"value": "~/Source/Workspaces/WpsCSharpProjects/WpsPdfProServer/wpsPdfServer/server02"
},
{
"name": "selectedServer",
"value": "server02"
},
{
"name": "winWpsPdfProExportLocation",
"value": {
"x": 150,
"y": 150,
"length": 2
}
},
{
"name": "winWpsPdfProExportSize",
"value": {
"w": 769,
"h": 607
}
},
{
"name": "lastSelectedPdfPref",
"value": "[Kleinste Dateigröße]"
},
{
"name": "pdfSettings",
"value": {

}
},
{
"name": "pdfExportSetting",
"value": "xxxxxxxx"
},
{
"name": "selectOperatingMode",
"value": 1
},
{
"name": "operatingMode",
"value": 0
},
{
"name": "saveMode",
"value": 0
},
{
"name": "WpsPdfProExportLogLocation",
"value": {
"x": 150,
"y": 150
}
},
{
"name": "WpsPdfProExportLogSize",
"value": {
"w": 769,
"h": 607
}
}
]



als Antwort auf: [#564739]

Datei mit write zeilenweise ändern

JeT
Beiträge gesamt: 40

10. Jul 2018, 18:51
Beitrag # 3 von 4
Beitrag ID: #564816
Bewertung:
(1646 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Werner,

ja, ein ähnliches Prinzip habe ich umgesetzt bzw. schau mir das mit dem JSON auch nochmal an.

Zitat warum willst Du die Datei zeilenweise ändern?

Ist mehr eine rein theoretische Performance-Überlegung (die in der Praxis vllt. gar keine Rolle spielt):
warum soll ich bsp. hundert Zeilen auslesen und neuschreiben, wenn ich nur die zweite umschreiben muss...

Grüße
Jens


als Antwort auf: [#564744]

Datei mit write zeilenweise ändern

WernerPerplies
Beiträge gesamt: 2762

10. Jul 2018, 19:55
Beitrag # 4 von 4
Beitrag ID: #564817
Bewertung:
(1641 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jens,

Zitat Ist mehr eine rein theoretische Performance-Überlegung (die in der Praxis vllt. gar keine Rolle spielt):

Sicher nicht, eine Lösung, wie Du Sie dir vorstellst, benötigt mehrere Plattenzugriffe und würde auch intern alle Daten einlesen und wieder herausschreiben.
Aber Du kannst es ja gerne mal ausprobieren. ;-)

Eine JSON-Lösung findest Du beispielsweise hier:

JSON-Datei erzeugen und wieder einlesen



als Antwort auf: [#564816]
X