0 votos

Applescript para la búsqueda/reemplazo múltiple utilizando listas maestras separadas

Estoy tratando de crear un script para extraer una lista de datos de la columna A en el documento 1, y luego usar las columnas A y B en el documento 2 como datos múltiples de búsqueda/reemplazo.

Todo funciona en cuanto a agarrar los datos necesarios pero no entiendo como escribir el script para hacer el find/replace. Quiero que recorra toda la lista del documento 1 mientras hace referencia a la primera fila de la lista find/replace (documento 2), y que luego haga lo mismo con la fila 2, y así sucesivamente hasta llegar al final del documento 2.

Verás cómo he intentado ejecutar esto en la parte inferior pero no entiendo cómo debería escribirse. Agradecería mucho algunas indicaciones aquí si alguien se anima a ayudarme.

-- set paths

tell application "Finder"

set folderpath to folder "Macintosh HD:Users:Will:Desktop:Data1"
set filePath to first file of folderpath as alias
set folderpath2 to folder "Macintosh HD:Users:Will:Desktop:Data2"
set filePath2 to first file of folderpath2 as alias

end tell

-- grab data

set fileRefr to (open for access filePath)
set theText to (read fileRefr)
set textList to paragraphs of theText
close access fileRefr

set uniqueList to {}
set dataList to every paragraph of (do shell script "cat " & quoted form of POSIX path of filePath & " | awk -F'" & tab & "' 'BEGIN{getline}{print $1}'")
set uniqueList to uniqueList & dataList

set fileRefr2 to (open for access filePath2)
set theText2 to (read fileRefr2)
set textList2 to paragraphs of theText2
close access fileRefr2
set theCNT to (count of textList2) - 1

set uniqueList2 to {}
set dataList2 to every paragraph of (do shell script "cat " & quoted form of POSIX path of filePath2 & " | awk -F'" & tab & "' 'BEGIN{getline}{print $1}'")
set uniqueList2 to uniqueList2 & dataList2

set uniqueList3 to {}
set dataList3 to every paragraph of (do shell script "cat " & quoted form of POSIX path of filePath2 & " | awk -F'" & tab & "' 'BEGIN{getline}{print $2}'")
set uniqueList3 to uniqueList3 & dataList3

-- find/replace data

repeat with i from 1 to count theCNT
set uniqueList to (replace_chars of uniqueList from (item i of uniqueList2) to (item i of uniqueList3))
end repeat

1voto

Baczek Puntos 150

Debe utilizar el texto del primer documento en lugar de ponerlo en una lista.

Ponga el texto de búsqueda y el texto de sustitución del segundo documento en una lista.

Como este script :

tell application "Finder"
    set filePath to (first file of folder "Data1" of desktop) as alias
    set filePath2 to (first file of folder "Data2" of desktop) as alias
end tell
-- get unique text from the first column
set uniqueText to do shell script "awk -F'" & tab & "' 'BEGIN{getline}{print $1}' " & quoted form of POSIX path of filePath

-- get unique text from the first column, but print the first and the second column to get the searching text and the replacing text (pair), this put the awk's result into a list
set uniqueList2 to paragraphs of (do shell script " awk -F'" & tab & "' 'BEGIN{getline}{print $1\"\\t\"$2}' " & quoted form of POSIX path of filePath2)

set uniqueList to my replace_chars(uniqueText, uniqueList2) -- find/replace data, put the paragraphs into a list

to replace_chars(t, L2)
    set tid to text item delimiters
    set tc to count L2
    repeat with i from 1 to tc
        set text item delimiters to tab
        set {toFind, toReplace} to text items of (item i of L2) -- get items separated by tab from a item in uniqueList2)
        set text item delimiters to toFind
        set {L, text item delimiters} to {text items of t, toReplace}
        set t to L as text
    end repeat
    set text item delimiters to tid
    return paragraphs of t
end replace_chars

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