0 votes

Applescript pour la recherche/remplacement multiple utilisant une liste maîtresse séparée

J'essaie de créer un script pour extraire une liste de données de la colonne A du document 1, puis utiliser les colonnes A et B du document 2 comme données de recherche/remplacement multiples.

Tout fonctionne pour ce qui est de la saisie des données requises mais je ne comprends pas comment écrire le script pour effectuer la recherche/remplacement. Je veux qu'il parcoure toute la liste du document 1 tout en référençant la première ligne de la liste de recherche/remplacement (document 2), puis qu'il fasse de même avec la ligne 2, et ainsi de suite jusqu'à ce qu'il atteigne la fin du document 2.

Vous verrez comment j'ai essayé de l'exécuter en bas de page mais je ne comprends pas comment cela doit être écrit. J'apprécierais vraiment quelques conseils si quelqu'un veut bien m'aider.

-- 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

Vous devez utiliser le texte du premier document au lieu de le mettre dans une liste.

Mettez le texte de recherche et le texte de remplacement du deuxième document dans une liste.

Comme ceci 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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X