2 votos

cambiar multiples datos de campos xml y que los datos tengan diferente nombre #hay que probar apple script #en mac

Descripción del escenario

Este lado tiene que ir a un ftp con regularidad para descargar los datos hacia abajo y cambiar sus campos. El proceso es:

  1. Descargar de un lugar para obtener un nombre de archivo llamado "202301081014XXXX.REQ" formato de datos xml
  2. cambiar los datos de uno de los campos de S001 cuyo contenido es "1234" Cámbielo por "abcd"
  3. Si se completa el cambio, cree un archivo con el mismo nombre y nómbrelo como "202301081014XXXX.REQ.OK" 4.Sube los dos datos creados a otra ruta ftp

Actualmente he probado la acción

  1. a través de las herramientas script de la aplicación para Mac
  2. El funcionamiento de la grabación de la pantalla es el siguiente

    tell application "Finder" activate open document file "202301081014N1234.REQ" of folder "Downloads" of folder "blue2" of folder "Users" of startup disk using application file "BBEdit.app" of folder "Applications" of startup disk end tell tell application "BBEdit" activate open find window find "<S001>1234</S001>" searching in text 1 of text document id 829 with selecting match set characters 406 thru 428 of text document id 829 to "<S001>abcd</S001>" select insertion point after characters 406 thru 428 of text document id 829 save text document id 829 end tell

Problemas encontrados

Como los nombres de los datos son diferentes, he leído el documentos oficiales pero no sé cómo definir el ámbito de aplicación. Y el campo <S001> está en una posición diferente, por lo que no puedo ejecutar el AppleScript grabado.

0voto

red_menace Puntos 111

Intentar grabar la interfaz de usuario es, en el mejor de los casos, problemático, y puede incluir afirmaciones extrañas y distintos tipos de referencias. Una mejor opción es mirar el diccionario de scripting de una aplicación (si tiene uno) para ver la funcionalidad que expone - BBEdit tiene soporte para la mayoría de sus funciones.

Además de un ID, las ventanas y los documentos también tienen un índice, que es su orden de visualización. El objeto frontal es siempre 1, por lo que se puede utilizar en lugar de tratar de averiguar un ID único.

En find devolverá un registro que contiene una referencia al intervalo de caracteres de una coincidencia, y también tiene una opción para seleccionarlo: se pueden utilizar en lugar de los desplazamientos de caracteres codificados. El comando replace sólo reemplazará todas las ocurrencias.

Una versión más general de su script sería algo como:

# Script settings - change values as desired:
property autoSave : false -- automatically save and close the document?
property replaceAll : false -- replace all occurances of searchText?
property searchText : "<S001>1234</S001>"
property replaceText : "<S001>abcd</S001>"

on run -- example
   doStuff for (choose file with multiple selections allowed)
end run

to doStuff for someFiles -- process file items
   tell application "BBEdit" to repeat with aFile in someFiles
      open aFile
      tell document 1 to tell its text
         if replaceAll then
            replace searchText using replaceText options {starting at top:true}
         else -- replace first match
            set findResult to find searchText options {starting at top:true} with selecting match
            if found of findResult then set contents of selection to replaceText
         end if
      end tell
      if autoSave then
         close document 1 with saving
      else -- review before closing, etc
         activate
      end if
   end repeat
end doStuff

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X