Apple脚本用于解析名称和创建文件

时间:2015-03-11 21:43:30

标签: file applescript osx-yosemite create-directory

我是一名医生,试图以下列格式解析从Filemaker Pro创建的文件:CCDOC | FamID | PtID | DocType | Date | FileExtension 其中

  • CCDOC是识别临床护理文件的前缀
  • FamID是家庭ID
  • PtID是患者ID
  • 文件类型(放射学,实验室,咨询等)
  • 日期(格式为mm_dd_yyy)
  • 扩展(主要是PDF,但有些JPG等)

我想创建一个Apple脚本,它将根据这些类型创建嵌套文件夹(Family文件夹包含该系列中的患者文件夹,其中包含不同的文档类型等)。然后文件将被移动到该文件夹​​。

你能帮我解决这个问题吗?

这是文件格式的图像

enter image description here

这是创建它们的CSV文件

enter image description here

3 个答案:

答案 0 :(得分:1)

更新了答案

根据我目前收集到的内容,这就是我现在可以得到的内容。它评论很好,所以你可以看到它在做什么。添加一个例子,我可能会让你更进一步......

#!/bin/bash
#
# Go to the Desktop, or wherever the CSV file is and the output tree must be made
cd ~/Desktop || exit

# Parse "data.csv" using "|" as field separator
awk -F'|' '
  {
     # Pick up all fields of record into appropriately named variables
     CCDOC=$1; FamID=$2; PtID=$3; DocType=$4; Date=$5; Ext=$6;

     # Output name of directory to create, surrounded by "" to permit spaces, e.g. "Lab Test"
     print "\"ROOT/" FamID "/" PtID "/" DocType "/" Date "\""

   }' data.csv | xargs mkdir -p

给出data.csv这样的文件:

CCDOC|F999|P5678|Consult|02-03-2013|PDF
CCDOC|F7777|P1111|Radiology|03-04-1999|JPG
CCDOC|F999|P4321|Lab Test|06-12-1997|PDF

你会得到这个:

enter image description here

原始答案

问题的答案是,你的问题的答案是在创建目录的shell中使用mkdir -p命令,包括任何必要的干预目录,而不会抱怨任何已存在或不存在的情况,方式。通过将其粘贴到终端

中自行尝试
mkdir -p ~/Desktop/Freddy/Frog/on/a/log

您将在桌面上看到此内容

enter image description here

现在,问题是是否要使用Applescript解析Filemaker Pro CSV文件。就我个人而言,我发现Applescript如此令人难以置信的冗长,以至于无法理解,并且会在每周的每一天都直接bash ...而且不要忘记你可以简单地利用Applescript的所有bash权力使用

do shell script xyz

举一个例子,假设您将以下内容保存在桌面上作为示例文件并将其命名为data.csv。请注意,家庭P5678中有两名患者(P4321F999)。

CCDOC|F999|P5678|Consult|02-03-2013|PDF
CCDOC|F7777|P1111|Radiology|03-04-1999|JPG
CCDOC|F999|P4321|Lab|06-12-1997|PDF

然后,您可以将以下一行内容粘贴到终端

cd ~/Desktop &&  awk -F'|' '{print "ROOT/" $2 "/" $3}' data.csv | xargs mkdir -p

你最终会完成以下工作

enter image description here

让我解释一下脚本是如何工作的。首先,它将目录更改为您的桌面(cd ~/Desktop),然后,如果工作(&&),它会启动awk并告诉它每行上的字段由垂直条分隔(awk -F'|')。然后,awk会读取data.csv中的所有行,并拆分字段并为您编号 - 因此$1将包含CCDOC$2将包含{{1} },FamilyId将包含$3。因此,对于CSV文件中的每一行,我们都会打印PatientId。实际上,ROOT/FamilyId/PatientId脚本的输出如下:

awk

然而,我们将这些行传递给ROOT/F999/P5678 ROOT/F7777/P1111 ROOT/F999/P4321 并告诉它在每一行上运行xargs,因此它有效地执行此操作,这使我在上面屏幕抓取的文件夹。

mkdir -p

如果你不想从终端做到这一点,你想从Applescript中做到这一点,你只需将相同的命令放在一个文件中并调用它,比如说mkdir -p ROOT/F999/P5678 mkdir -p ROOT/F7777/P1111 mkdir -p ROOT/F999/P4321

MarksThing

然后在Applescript中,你会做

#!/bin/bash
cd ~/Desktop &&  awk -F'|' '{print "ROOT/" $2 "/" $3}' data.csv | xargs mkdir -p

虽然您必须先使用

使其可执行
do shell script "MarksThing"

我知道这并没有完全回答你的问题,但我仍然不理解其余部分。您可以回答我的问题(在您原始问题下面的chmod +x MarksThing ),而不是猜测和浪费一大堆时间,如果您有兴趣继续阅读“非Applescript”,请告诉我

答案 1 :(得分:0)

只需输入rootFolder的路径,这是您希望文件夹所在的位置。祝你好运。

set rootFolder to path to desktop

set tempVar to display dialog "Enter the following information separated by \"/\"" & return & "CCDOC/FamID/PtID/DocType/Date/FileExtension" default answer ""
set folderPath to text returned of tempVar

set thePath to POSIX path of rootFolder & folderPath
do shell script "mkdir -p " & quoted form of thePath

答案 2 :(得分:0)

我建议您查看FileMaker的AppleScript字典并尝试编写AppleScript,告诉FileMaker和Finder创建所需的文件和文件夹,而不是从FileMaker导出CSV然后解析它并从中创建文件。您可能会创建一个更简单的脚本,更容易编写和维护。

如果您无法访问FileMaker,则可能需要编写AppleScript以告知Numbers和Finder创建文件和文件夹。 Numbers可以为您读取CSV,Finder可以创建文件夹并移动文件。这样做的命令在Numbers AppleScript Dictionary和Finder AppleScript字典中,它们相当容易学习。

例如,要使用Finder在桌面上创建根文件夹:

tell application "Finder"
    set theDesktopFolder to the path to the desktop folder as alias
    set theRootFolderName to "Patient Care"
    set theRootFolder to make new folder at theDesktopFolder with properties {name:theRootFolderName}
end tell

...然后您可以告诉Numbers打开CSV并逐列循环,逐个单元格获取单元格值,并告诉Finder在RootFolder对象中创建相应的文件夹,该对象存储为通过上面的脚本变量,所以你要说的是:

make new folder at theRootFolder with properties {name:theCellValue}

上述脚本是以故意冗长的方式编写的,使其更易于阅读和理解。当您的脚本完成后,您可以在另一个人中共享它,例如,可能必须将“患者护理”名称更改为“客户服务”或类似名称,并且他们很容易在明确编写的AppleScript中执行此操作,即使他们没有AppleScript技能。这是AppleScript的一个主要功能。

您可以在AppleScript Language Guide中找到如何在AppleScript中执行重复循环。它还将向您展示如何为您要使用的应用程序打开AppleScript Dictionaries,例如Numbers和Finder。

另请注意,shell脚本编写可能很危险。您可以使用AppleScript无法实现的方式清除数据。如果你搞砸了AppleScript,就会出错。如果你搞砸了bash,你可以消灭千兆字节的数据。 Stack Overflow上的很多人会用bash答案回答你的AppleScript问题,但如果你没有bash经验,这不一定是一个好的答案。与bash相比,AppleScript具有橡胶缓冲器,因此非程序员可以安全地创建自己的解决方案。