Combinar el contenido de los archivos línea por línea (intercalar líneas)

Estoy usando Windows 10 e InDesign CS6. Me gustaría tomar 2 archivos, mezclar el contenido línea por línea y enviarlos a un tercer archivo para hacer un libro electrónico, de la siguiente manera.

ARCHIVO DE ENTRADA 1 (por ejemplo, TXT, XML, SQL, etc.)

[Este archivo ya está en formato línea por línea; cada línea está delimitada por un retorno.]

línea 1

línea 2

línea 3

etc.

ARCHIVO DE ENTRADA 2 (INDD)

[Este archivo tiene la forma de texto fluido y cada línea deberá estar delimitada, por ejemplo, 1 línea = cada cadena de texto que comienza con una letra mayúscula y termina con "punto + espacio".]

línea A [nota al pie 1]

línea B [nota al pie 2]

línea C [nota al pie 3]

etc.

ARCHIVO DE SALIDA 3 (por ejemplo, EPUB, HTML, XML, etc.)

línea 1

línea A [nota al pie 1]

línea 2

línea B [nota al pie 2]

línea 3

línea C [nota al pie 3]

etc.

Encontré algunas discusiones relevantes aquí y aquí (la esencia es que los sistemas * nix tienen una función de pegado, Excel tiene una función de concertina y se sugirieron un método en el símbolo del sistema de DOS y algunos otros métodos de secuencias de comandos). Me temo que estas discusiones son un poco crípticas para mí y no ayudan por completo a mi situación. Soy experto en informática pero no tengo experiencia en codificación, así que estoy buscando ayuda aquí para mostrarme el camino y comenzar.

Cualquier sugerencia para un flujo de trabajo razonablemente práctico sería apreciada (no es necesario que esté completamente automatizado). También me gustaría explorar si el archivo de entrada 1 era, digamos, un archivo DOC o INDD de texto fluido y sin marcar. Sería bueno tener cierta flexibilidad en el flujo de trabajo.

Esto no va a ser fácil: hay tantas incógnitas y trampas en este tipo de procesamiento, lo más importante (que se me ocurra): ¿Está seguro de que siempre habrá la misma cantidad de líneas en ambos archivos? ¿ Está seguro de que todas las líneas en el archivo 2 siempre se pueden demarcar así (qué sucede si una línea contiene algo como "por ejemplo, Microsoft", por ejemplo)? ¿Son los archivos de entrada tan largos que separar manualmente el archivo 2 en líneas es prohibitivo? Si puede garantizar una demarcación precisa y un número idéntico de líneas, no debería ser demasiado difícil de implementar.
Sin embargo, todavía implicaría escribir un guión de InDesign razonablemente complejo. JavaScript es probablemente el más fácil y popular de los lenguajes soportados.
@JanusBahsJacquet no llamo complejo al guión
@joojaa Eso depende de cuánto se supone que debe hacer y qué tan automatizado debe ser. Si lo necesita para abrir los archivos sin tener el texto en un documento (es decir, elegir los archivos de entrada en un aviso), agregar el contenido al documento y diseñarlo de acuerdo con las reglas no especificadas aquí, y luego exportar el documento como un ePub completo, que en mi mundo contaría como un script razonablemente complejo para alguien que tiene poca o ninguna experiencia en codificación.
@JanusBahsJacquet seguro, pero siempre puedes defenderte de que no vale la pena hacer todo en el mundo, ya que podría hacerse mejor. ¡Lo mejor es el enemigo de Done!
@joojaa Mi punto era que no está claro a partir de la pregunta cuánto de este proceso debería automatizarse y cuánto se haría manualmente. Si simplemente poner las líneas en el orden correcto es lo único que necesita ser automatizado, es bastante simple (aunque separar las líneas en el segundo archivo aún podría ser complejo; no sabemos cuántas advertencias hay); si todo necesita ser automatizado, es más complejo.
@JanusBahsJacquet seguro, pero luego, comenzando desde nada, podemos asumir que la MAYORÍA no se automatizará. Debido a que la mayoría de las personas no entienden la automatización, piensan que los pequeños pasos son automatización. Me refiero a que lo más probable es que el 25% de todas las personas que trabajan en InDesign sean totalmente reemplazables con un script, es solo que no saben dónde encontrar a la persona que lo haga. Pero entonces la licencia de inDesign le prohíbe hacer esto (el sistema no solo muestra el texto de la licencia). Necesita la licencia del servidor para hacer esto.
Gracias por tus aportes. He editado "buen flujo de trabajo" en la pregunta original para leer un "flujo de trabajo razonablemente práctico... (no es necesario que esté completamente automatizado)".
Aprecio que esto todavía esté abierto a interpretación, pero estoy contento con esto porque estoy abierto a sugerencias. Es importante tener en cuenta que esta no es una pregunta teórica sobre si es posible automatizar un flujo de trabajo de publicación completo porque se supone que es posible . Esta es una pregunta sobre lo que es práctico hacer para la mayoría de las situaciones de publicación. La mayoría de las personas estarán felices de abrir manualmente un programa, hacer doble clic en el script, exportar a ePub, etc.

Respuestas (2)

Sí, es un poco desafortunado que las habilidades de alfabetización informática de las personas sean en general tan bajas como las tuyas. Pero eso es normal, supongo. Lo haría con mi editor de texto o sed , pero así soy yo. La respuesta propuesta es bastante sencilla. Pero hagamos esto en inDesign.

  1. Inicie inDesign y abra un nuevo documento (y nada más)
  2. Importar
    1. contenido del ARCHIVO 1 en un marco de texto
    2. contenido del ARCHIVO 2 contenido en otro marco de texto
  3. Inicie ExtendScript Toolkit (si tiene algún software de Adobe instalado, se instalará).

    1. Elija Archivo -> Nuevo JavaScript
    2. pegue lo siguiente en el documento:

      #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. Presiona la flecha etiquetada como "empezar a correr..." para ejecutar

Eso es todo lo que hay para fusionar las líneas. Puedes ir mucho más lejos fácilmente, pero eso es otra cosa completamente diferente. Sí, realmente no hay necesidad de tener un solo ser humano en una tubería de publicación, hoy.

Cosas a tener en cuenta ABSOLUTAMENTE tiene que haber una correspondencia 1: 1 entre líneas o esto fallará. Además, no use este script en ningún otro entorno, excepto en un documento nuevo con solo 2 marcos.

Gracias. Asegurar una correspondencia 1:1 no es un problema, por ejemplo, para traducciones en las que esperaríamos esto. Tomemos un poema como la Odisea de Homero que tiene 12.110 versos griegos. Naturalmente, la traducción al inglés también tendrá 12.110 líneas. El problema con la solución sugerida es que no todos caben en 1 marco de texto en 1 página, por lo que espero que el enhebrado de marcos de texto esté bien. Además, dijo que es posible ir mucho más allá, entonces, ¿cómo se puede especificar el inicio y el final de cada línea, por ejemplo, comenzar con una letra mayúscula y terminar con un punto o un número de línea? ¿Se incluirán las notas al pie?
@AdAstm no importa para el guión, está operando en el nivel de la historia, la única razón por la que necesito que tenga 2 cuadros en la primera página es simplemente porque puedo encontrar identificadores para las historias. Las famas en sí mismas son irrelevantes aparte de eso. Después de combinarlos, puedes hacer lo que quieras con ellos.
Ejecuté la secuencia de comandos con diferentes puntos de partida y encontré lo siguiente: ∙ el documento de InDesign debe tener 1 página · El marco 1 es el primer marco que se dibujará independientemente de su posición relativa al segundo marco · la secuencia de comandos toma las líneas de el fotograma 2 y los intercala entre las líneas del fotograma 1, empezando por la última línea · se mantiene el formato de las líneas del fotograma 1. Todo el formato de las líneas del Cuadro 2 se pierde en el formato del Cuadro 1 · Todas las notas al pie se eliminan, independientemente de si estaban en el Cuadro 1 o en el Cuadro 2 · También funciona para texto no latino
Hablando estratégicamente, que es de lo que se trataba la pregunta, supongo que cree que usar la función de secuencia de comandos nativa de InDesign es el camino a seguir y que JavaScript es mejor para el propósito de la pregunta que VBScript. Además, una secuencia de comandos de JavaScript debe construirse sobre el operador +=.
El script @AdAstm VB está bien, pero no es portátil entre sistemas, ¡y debe ser administrador para ejecutarlo! A menos que compre una licencia de servidor de Indesign. De lo contrario, no hay diferencia, también el servidor es solo una copia extra costosa de indesign. Solo si debe interactuar con el sistema en general. Pensando estratégicamente, debería contratar a un desarrollador que haya hecho esto antes.
En el script que ha escrito, el operador += es el operador clave que está haciendo el trabajo. Hace lo que se ha pedido en la pregunta, pero a expensas de eliminar el formato y las notas al pie (estas últimas se mencionan en la pregunta). ¿Su secuencia de comandos funcionaría mejor si usara copiar y pegar?

Kasyan Servetsky me sugirió amablemente que usara el método de movimiento y aquí está el resultado que parece funcionar bien...

#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]);
}

Entonces, la respuesta a la pregunta original es preparar el texto del ARCHIVO DE ENTRADA 1 y el ARCHIVO DE ENTRADA 2 dentro de InDesign (dos marcos de texto separados en una página) y luego ejecutar el script anterior.