org-mode – ¿Cómo harías una combinación de correspondencia?

Pregunta:

Estoy tratando de reemplazar Microsoft Word (estremecimiento) para este proceso específico. El proceso no es específico para el correo electrónico o el correo tradicional, pero es similar. El proceso es que tengo un archivo de plantilla con variables que extraigo de una hoja de cálculo. Puedo "paginar" las variables. Estoy tratando de replicar esto en emacs. Después de buscar, encontré algunos casos de personas que lograron esto, pero no hay detalles sobre cómo. Gracias.

Voy a tratar de explicar más según lo solicitado. Necesito un documento de plantilla que tenga variables que cambien por página, como una combinación de correspondencia ( https://en.wikipedia.org/wiki/Mail_merge ). Mi caso de uso no es imprimirlos, por lo que no es necesario. En realidad, esto es para automatizar la creación de cientos de configuraciones de enrutadores. Gracias de nuevo por todas las respuestas.

Ejemplo:


nombre de hostname-variable nombre de hostname-variable

!

nombre de username-variable nombre de username-variable contraseña 0 password-variable

!

sin plataforma de servicio

marcas de tiempo del servicio debug datetime msec

Y así…


En Microsoft Word, hace referencia a una hoja de cálculo de Excel para las variables. Pero estaría bien hacer referencia a los datos de otras formas. CSV, tabla, etc.

| Hostname-variable |username-variable | password-variable |
|-------------------+------------------+-------------------|
| Hostname1         |Username1         | password1         |
| Hostname2         |Username2         | password2         |
| Hostname3         |Username3         | password3         |
|-------------------+------------------+-------------------|

La "Página 1" se vería así:


nombre de host Hostname1

!

nombre de Username1 Nombre de Username1 contraseña 0 password1

!

sin plataforma de servicio

marcas de tiempo del servicio debug datetime msec

Y así…


"Página 2" se vería así


nombre de host Hostname2

!

nombre de Username2 Nombre de Username2 contraseña 0 password2

!

sin plataforma de servicio

marcas de tiempo del servicio debug datetime msec

Y así…


"Página 3" se vería así


nombre de host Hostname3

!

nombre de Username3 Nombre de Username3 contraseña 0 password3

!

sin plataforma de servicio

marcas de tiempo del servicio debug datetime msec

Y así…


Respuesta:

Prueba esto

Crear una tabla con nombre

#+NAME: my-data
| Hostname-variable |username-variable | password-variable |
|-------------------+------------------+-------------------|
| Hostname1         |Username1         | password1         |
| Hostname2         |Username2         | password2         |
| Hostname3         |Username3         | password3         |

Crear bloque de código de plantilla, por ejemplo, ruby

Nota: Para este ejemplo, elegí ruby ​​pero no se requiere ruby .

Te animo a que uses tu idioma favorito para escribir la plantilla.

#+NAME: simple-template-ruby
#+BEGIN_SRC ruby :var data=my-data() :results replace   
  data.map{|d| 
  template = <<-MYFORM
    hostname #{d[0]}

    !

    username #{d[1]} password 0 #{d[2]}

    !

    no service pad

    service timestamps debug datetime msec


  MYFORM

  template

  }.join("\n")
#+END_SRC

Ejecute el bloque de código usando Cc CC dentro del bloque de código o en línea #+CALL:

#+NAME: Mail-Merge-Results
#+CALL: simple-template-ruby()

A continuación se muestran los resultados de la combinación de correspondencia:

#+RESULTS: Mail-Merge-Results
hostname Hostname1

!

username Username1 password 0 password1

!

no service pad

service timestamps debug datetime msec



hostname Hostname2

!

username Username2 password 0 password2

!

no service pad

service timestamps debug datetime msec



hostname Hostname3

!

username Username3 password 0 password3

!

no service pad

service timestamps debug datetime msec

Este código fue probado usando

GNU Emacs 24.4.1 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14)
 of 2014-12-25

org-mode version: 8.3.1

A continuación se muestran los pasos adicionales necesarios para generar archivos separados, por ejemplo, Hostname1.txt, Hostname2.txt y Hostname3.txt

Agregar bloque de código de escape a la plantilla

  • Aviso comas , se utilizan para escapar de la sintaxis en modo org dentro de la plantilla

    ,#+begin_src y ,#+end_src

  • Tenga en cuenta que sh se usa en este ejemplo, pero podría ser cualquier idioma configurado, por ejemplo, ruby

  • Evite la ejecución accidental agregando :eval never al bloque de código de escape.

  • Configure el nombre del archivo usando :tangle #{d[0]}.txt

A continuación se muestra el bloque de código actualizado

#+NAME: tangled-template-ruby
#+BEGIN_SRC ruby :var data=my-data() :results replace   
  data.map{|d| 
  template = <<-MYFORM

  ,#+begin_src sh :eval never :tangle #{d[0]}.txt 
    hostname #{d[0]}

    !

    username #{d[1]} password 0 #{d[2]}

    !

    no service pad

    service timestamps debug datetime msec
  ,#+end_src

  MYFORM

  template

  }.join("\n")
#+END_SRC

Agregar :results drawer replace encabezados a #+CALL: línea #+CALL: declaración

#+NAME: Mail-Merge-Results-into-Files
#+CALL: tangled-template-ruby() :results drawer replace 

Use Cc Cc en inline #+CALL: declaración para generar results dentro de un drawer

#+RESULTS: Mail-Merge-Results-into-Files
:RESULTS:

#+begin_src sh :eval never :tangle Hostname1.txt 
  hostname Hostname1

  !

  username Username1 password 0 password1

  !

  no service pad

  service timestamps debug datetime msec
#+end_src



#+begin_src sh :eval never :tangle Hostname2.txt 
  hostname Hostname2

  !

  username Username2 password 0 password2

  !

  no service pad

  service timestamps debug datetime msec
#+end_src



#+begin_src sh :eval never :tangle Hostname3.txt 
  hostname Hostname3

  !

  username Username3 password 0 password3

  !

  no service pad

  service timestamps debug datetime msec
#+end_src

:END:

Utilice Cc Cv t para tangle los nuevos bloques de código en archivos separados

También debería ver un mensaje similar a este
Tangled 3 code blocks from your-file.org

Se probó código adicional usando

GNU Emacs 24.4.1 (x86_64-unknown-cygwin)
 of 2014-11-14

org-mode version: 8.2.10

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım