2012-04-23 38 views
0

下面的腳本基本上選擇一個帶有PDF的文件夾,獲取所選文件夾的PDF文件數,將結果寫入文本文件,在Excel中打開文本文件。腳本工作正常,但我得到整個文件路徑。帶文件路徑信息到•和/文本項目分隔符

結果是:

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/: 65 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/:  RESENDS 0 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/: 23 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/:  RESENDS 6 

我想要去除之前子彈•一切都那麼對於每/列。事情是這樣的:

CUSTO_4 BODY 65 

CUSTO_4 BODY   RESENDS 0 

CUSTO_4 COVERS 23 

CUSTO_4 COVERS  RESENDS 6 

我試圖把握文本項分隔符的概念,並使用偏移命令,但我不知道如何實現其寫入腳本。

集TARGET_FOLDER選擇具有提示的文件夾「選擇目標僅包含PDF文件計算文件的文件夾」與允許在沒有隱形 的結果集,以多項選擇「」

repeat with i from 1 to (count target_folder) 
     set thisFolder to (POSIX path of item i of target_folder) 

    --Find & count all PDFs in folders selected that DON'T starts with letter R 
    set fileCount to do shell script "find " & quoted form of thisFolder & " -type f -name *.pdf -and -not -iname 'R[0-9-_]*.pdf' | wc -l" 

    set results to (results & "" & thisFolder & ":" & fileCount & return) 

    --Find & count all PDFs in folders selected that starts with letter R 
    set fileCount to do shell script "find " & quoted form of thisFolder & " -type f -iname 'R[0-9-_]*.pdf' | wc -l" 

    set results to (results & "" & thisFolder & ":" & tab & tab & "RESENDS" & fileCount & return) 

    end repeat 



--write results to a txt file 

set theFilePath to (path to desktop folder as string) & "PDF File Count.txt" 

set theFile to open for access file theFilePath with write permission 

try 

set eof of theFile to 0 

write results to file theFilePath 

close access theFile 

on error 

close access theFile 

end try 

--Will open the the PDF File Count.txt in Excel 
tell application "Microsoft Excel" 

activate 

open text file filename "PDF File Count.txt" 

end tell 

回答

0

你並不總是必須使用文本項目分隔符來處理文本:

set xxx to "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/: 65 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/:  RESENDS 0 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/: 23 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/:  RESENDS 6" 

set yyy to do shell script "echo " & quoted form of xxx & " | grep -o •.* | sed -e 's/•\\(.*\\):\\(.*\\)/\\1\\2/' -e 's/\\//  /'g" 

和另一種方法:

set xxx to "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/: 65 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/:  RESENDS 0 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/: 23 

/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/:  RESENDS 6" 

-- break apart and capture original delimiters 
set {Astid, AppleScript's text item delimiters} to {AppleScript's text item delimiters, "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•"} 
set yyy to text items 2 thru -1 of xxx 
--put together 
set AppleScript's text item delimiters to {""} 
set yyy to yyy as string 

-- break apart 
set AppleScript's text item delimiters to ":" 
set yyy to text items of yyy 
--put together 
set AppleScript's text item delimiters to {""} 
set yyy to yyy as string 

-- break apart 
set AppleScript's text item delimiters to "/" 
set yyy to text items of yyy 
--put together 
set AppleScript's text item delimiters to tab 
set yyy to yyy as string 

-- reset original delimiters 
set AppleScript's text item delimiters to Astid 
return yyy 
+0

Red_Menace&adayzdone。感謝你的回覆。他們真的幫助我更好地理解了一點。我決定使用do shell腳本,因爲我可以用更少的代碼實現我想要的。 – nellbern 2012-04-24 20:12:45

1

AppleScript的文本項目分隔符用於確定文本如何拆分和/或重新組合。當你得到一個字符串的文本項時,這個字符串在每個分隔符處被分開,並且結果是一個片段列表。換句話說,如果您將文本項列表強制爲一個字符串,則會使用每個片段之間使用的分隔符重新組合這些片段。

對於你的榜樣,您可以使用類似如下(我加了一點格式,讓您的結果):

set theList to {¬ 
    "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/: 65", ¬ 
    "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/BODY/:  RESENDS 0", ¬ 
    "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/: 23", ¬ 
    "/Volumes/PREPRESS/1_CATALOG/2_Press/PRINT_Catalog/2012/•CUSTO_4/COVERS/:  RESENDS 6"} 

set finalResult to {} -- this will be the final result 

set tempTID to AppleScript's text item delimiters -- stash the original delimiters 
repeat with anItem in theList 
    set AppleScript's text item delimiters to "•" 
    set pieces to text items of anItem -- break apart at bullets 
    log result 

    set theFile to (rest of pieces) as text -- drop the first piece and reassemble 
    set AppleScript's text item delimiters to "/" 
    set pieces to text items of theFile -- now break apart at slashes 
    log result 

    set lastPiece to last item of pieces -- trim the last piece a bit 
    set theCount to 0 
    repeat while first character of lastPiece is in {space, ":"} 
     set lastPiece to text 2 thru -1 of lastPiece -- trim it 
     set theCount to theCount + 1 -- count up trimmed characters 
    end repeat 
    if theCount > 4 then set lastPiece to tab & tab & lastPiece -- add a little formatting... 
    set last item of pieces to lastPiece -- put the trimmed piece back 

    set text item delimiters to tab & tab 
    set pieces to pieces as text -- put the pieces back together with tabs 
    log result 

    set end of finalResult to pieces -- store the reassembled text for later 
end repeat 
set AppleScript's text item delimiters to tempTID -- restore the original delimiters 

choose from list finalResult with empty selection allowed -- show the results 
相關問題