Inhalt von Dateien zeilenweise zusammenführen (Zeilen vermischen)

Ich verwende Windows 10 und InDesign CS6. Ich möchte 2 Dateien nehmen, den Inhalt Zeile für Zeile mischen und wie folgt in eine dritte Datei ausgeben, um ein E-Book zu erstellen.

INPUT FILE 1 (z. B. TXT, XML, SQL usw.)

[Diese Datei ist bereits zeilenweise formatiert – jede Zeile ist durch einen Zeilenumbruch gekennzeichnet.]

Linie 1

Zeile 2

Zeile 3

usw.

EINGABEDATEI 2 (INDD)

[Diese Datei hat die Form von Fließtext und jede Zeile muss abgegrenzt werden, z. B. 1 Zeile = jede Textzeichenfolge, die mit einem Großbuchstaben beginnt und mit "Punkt + Leerzeichen" endet.]

Zeile A [Fußnote 1]

Zeile B [Fußnote 2]

Zeile C [Fußnote 3]

usw.

AUSGABEDATEI 3 ​​(z. B. EPUB, HTML, XML usw.)

Linie 1

Zeile A [Fußnote 1]

Zeile 2

Zeile B [Fußnote 2]

Zeile 3

Zeile C [Fußnote 3]

usw.

Ich habe hier und hier einige relevante Diskussionen gefunden (das Wesentliche ist, dass * nix-Systeme eine Einfügefunktion haben, Excel eine Konzertina-Funktion hat und eine Methode in der DOS-Eingabeaufforderung und einige andere Skriptmethoden vorgeschlagen wurden). Ich fürchte, diese Diskussionen sind für mich etwas kryptisch und helfen meiner Situation nicht vollständig. Ich bin Computerkundig, habe aber keine Programmiererfahrung, also suche ich hier nach Hilfe, um mir den Weg zu zeigen und loszulegen.

Alle Vorschläge für einen halbwegs praktischen Arbeitsablauf wären willkommen (es muss nicht vollständig automatisiert sein). Ich möchte auch untersuchen, ob Eingabedatei 1 beispielsweise eine DOC- oder eine INDD-Datei mit fließendem, nicht abgegrenztem Text war. Es wäre schön, etwas Flexibilität im Workflow zu haben.

Das wird nicht einfach – es gibt so viele Unbekannte und Fallstricke bei dieser Art der Verarbeitung, vor allem (was mir einfällt): Sind Sie sicher, dass in beiden Dateien immer die gleiche Anzahl von Zeilen vorhanden sein wird? Sind Sie sicher , dass alle Zeilen in Datei 2 immer so abgegrenzt werden können (was passiert, wenn eine Zeile zB etwas wie „zB Microsoft“ enthält)? Sind die Eingabedateien so lang, dass die manuelle Trennung von Datei 2 in Zeilen unerschwinglich ist? Wenn Sie eine genaue Abgrenzung und eine identische Anzahl von Zeilen sicherstellen können, sollte die Implementierung nicht allzu schwierig sein.
Es würde jedoch immer noch das Schreiben eines angemessen komplexen InDesign-Skripts erfordern. JavaScript ist wahrscheinlich die einfachste und beliebteste der unterstützten Sprachen.
@JanusBahsJacquet Ich würde den Skriptkomplex nicht nennen
@joojaa Das hängt davon ab, wie viel es tun soll und wie automatisiert es sein muss. Wenn Sie es brauchen, um die Dateien zu öffnen, ohne den Text in einem Dokument zu haben (dh die Eingabedateien in einer Eingabeaufforderung auszuwählen), dann den Inhalt zum Dokument hinzuzufügen und ihn gemäß den hier nicht angegebenen Regeln zu gestalten und dann das Dokument als zu exportieren ein vollständiges ePub, das meiner Meinung nach als relativ komplexes Skript für jemanden gelten würde, der wenig bis gar keine Programmiererfahrung hat.
@JanusBahsJacquet sicher, aber dann kann man sich immer verteidigen, dass alles auf der Welt es nicht wert ist, getan zu werden, da es besser gemacht werden könnte. Das Beste ist der Feind von Fertig!
@joojaa Mein Punkt war, dass aus der Frage nicht klar hervorgeht, wie viel von diesem Prozess automatisiert werden müsste und wie viel manuell erledigt werden würde. Wenn nur die Zeilen in der richtigen Reihenfolge automatisiert werden müssen, ist es ziemlich einfach (obwohl das Trennen der Zeilen in der zweiten Datei immer noch komplex sein könnte – wir wissen nicht, wie viele Vorbehalte es gibt); wenn das ganze automatisiert werden soll, ist es komplexer.
@JanusBahsJacquet sicher, aber wenn wir von nichts ausgehen, können wir davon ausgehen, dass das MEISTE davon nicht automatisiert werden soll. Weil die meisten Menschen Automatisierung nicht verstehen, denken sie, dass kleine Schritte Automatisierung sind. Ich meine, höchstwahrscheinlich sind 25 % aller Personen, die in InDesign arbeiten, vollständig durch ein Skript ersetzbar, es ist nur so, dass sie nicht wissen, wo sie die Person finden können, die es tut. Aber dann verbietet Ihnen die Lizenz von inDesign dies (das System übernimmt nicht nur den Text in der Lizenz). Dazu benötigen Sie die Serverlizenz.
Vielen Dank für Ihre Eingaben. Ich habe "guter Arbeitsablauf" in der ursprünglichen Frage bearbeitet, um einen "ziemlich praktischen Arbeitsablauf ... (er muss nicht vollständig automatisiert sein)" zu lesen.
Ich schätze, dass dies immer noch offen für Interpretationen ist, aber ich bin damit zufrieden, weil ich offen für Vorschläge bin. Es ist wichtig anzumerken, dass dies keine theoretische Frage ist, ob es möglich ist, einen gesamten Publishing-Workflow zu automatisieren, da davon ausgegangen wird, dass dies möglich ist . Dies ist eine Frage darüber, was in den meisten Veröffentlichungssituationen praktisch zu tun ist. Die meisten Leute werden gerne ein Programm manuell öffnen, auf das Skript doppelklicken, nach ePub exportieren usw.

Antworten (2)

Ja, es ist ein bisschen bedauerlich, dass die Computerkenntnisse der Leute im Allgemeinen so gering sind wie Ihre. Aber das ist normal denke ich. Ich würde es mit meinem Texteditor oder sed machen , aber das bin nur ich. Die vorgetragene Antwort ist recht einfach. Aber machen wir das in InDesign.

  1. Starten Sie inDesign und öffnen Sie ein neues Dokument (und sonst nichts)
  2. Importieren
    1. Inhalt von DATEI 1 in einen Textrahmen
    2. Inhalt des Inhalts von DATEI 2 in einen anderen Textrahmen
  3. Starten Sie das ExtendScript Toolkit (wenn Sie eine Adobe-Software installiert haben, wird diese installiert).

    1. Wählen Sie Datei -> Neues JavaScript
    2. Folgendes in das Dokument einfügen:

      #target indesign
      var doc = app.activeDocument;
      var text1 = doc.pages[0].textFrames[1].parentStory;
      var text2 = doc.pages[0].textFrames[0].parentStory;
      
      for(var p = text2.paragraphs.length-1; p >= 0 ; p--){
          text1.paragraphs[p].contents += text2.paragraphs[p].contents;
      }
      
    3. Klicken Sie zum Ausführen auf den Pfeil mit der Aufschrift „start running…“.

Das ist ungefähr alles, was es zum Zusammenführen der Linien gibt. Man kann leicht viel weiter gehen, aber das ist eine ganz andere Sache. Ja, es besteht heute wirklich keine Notwendigkeit, einen einzigen Menschen in einer Veröffentlichungspipeline zu haben.

Zu beachten ist dabei UNBEDINGT eine 1:1-Übereinstimmung zwischen den Zeilen, sonst schlägt dies fehl. Verwenden Sie dieses Skript auch in keiner anderen Umgebung, außer in einem neuen Dokument mit nur 2 Frames.

Danke schön. Eine 1:1-Übereinstimmung zu gewährleisten ist zB bei Übersetzungen, bei denen wir dies erwarten würden, kein Problem. Nehmen wir ein Gedicht wie Homers Odyssee , das 12.110 griechische Zeilen hat. Natürlich wird auch die englische Übersetzung 12.110 Zeilen umfassen. Das Problem mit der vorgeschlagenen Lösung ist, dass sie nicht alle in 1 Textrahmen auf 1 Seite passen, also hoffe ich, dass das Einfädeln von Textrahmen in Ordnung ist. Sie haben auch gesagt, dass es möglich ist, viel weiter zu gehen. Wie kann man also den Beginn und das Ende jeder Zeile angeben, z. B. mit einem Großbuchstaben beginnen und mit einem Punkt oder einer Zeilennummer enden? Werden die Fußnoten aufgenommen?
@AdAstm spielt für das Skript keine Rolle, es arbeitet auf Story-Ebene. Der einzige Grund, warum ich zwei Frames auf der ersten Seite brauche, ist einfach, dass ich Handles für die Storys finden kann. Die Berühmtheiten selbst sind ansonsten irrelevant. Nachdem sie kombiniert sind, können Sie damit machen, was Sie wollen.
Ich habe das Skript mit verschiedenen Startpunkten ausgeführt und folgendes festgestellt: ∙ das InDesign-Dokument muss 1 Seite haben · Rahmen 1 ist der 1. Rahmen, der unabhängig von seiner Position relativ zum 2. Rahmen gezeichnet wird · das Skript übernimmt die Zeilen von Rahmen 2 und fügt sie ab der letzten Zeile zwischen die Zeilen von Rahmen 1 ein · die Formatierung der Zeilen von Rahmen 1 bleibt erhalten. Die gesamte Formatierung der Zeilen von Rahmen 2 geht durch die Formatierung von Rahmen 1 verloren. · Alle Fußnoten werden gelöscht, unabhängig davon, ob sie sich in Rahmen 1 oder Rahmen 2 befanden. · Funktioniert auch für nicht-lateinischen Text
Aus strategischer Sicht, worum es in der Frage ging, denke ich, dass die Verwendung der nativen InDesign-Skriptfunktion der richtige Weg ist und dass JavaScript für den Zweck in der Frage besser geeignet ist als VBScript. Außerdem sollte ein JavaScript-Skript auf dem +=-Operator aufgebaut werden.
@AdAstm VB-Skript ist in Ordnung, aber nicht zwischen Systemen übertragbar, und Sie müssen Administrator sein, um es auszuführen! Es sei denn, Sie kaufen eine Indesign-Serverlizenz. Ansonsten gibt es keinen Unterschied, auch Server ist nur eine extra teure Kopie von Indesign. Nur wenn Sie mit dem gesamten System interagieren müssen. Aus strategischer Sicht sollten Sie einen Entwickler einstellen, der dies zuvor getan hat.
In dem von Ihnen geschriebenen Skript ist der Operator += der Schlüsseloperator, der die Arbeit erledigt. Es tut, was in der Frage gefragt wurde, jedoch auf Kosten der Entfernung der Formatierung und Fußnoten (letztere werden in der Frage erwähnt). Würde Ihr Skript besser funktionieren, wenn es Kopieren und Einfügen verwendet?

Kasyan Servetsky hat freundlicherweise vorgeschlagen, dass ich die Move-Methode verwende, und hier ist das Ergebnis, das gut zu funktionieren scheint ...

#target indesign
var doc = app.activeDocument;
var text1 = doc.pages[0].textFrames[1].parentStory;
var text2 = doc.pages[0].textFrames[0].parentStory;

for(var p = text2.paragraphs.length-1; p >= 0 ; p--){
    text2.paragraphs[p].move(LocationOptions.AFTER, text1.paragraphs[p]);
}

Die Antwort auf die ursprüngliche Frage besteht also darin, den Text von INPUT FILE 1 und INPUT FILE 2 in InDesign vorzubereiten (zwei separate Textrahmen auf einer Seite) und dann das obige Skript auszuführen.