这可能是一个很长的镜头,但我为自己编写了一个AppleScript,它可以记录我为任何项目工作多长时间。我想创建另一个脚本,根据日志文件中的信息计算总花费时间。
通常我的日志文件如下所示:
140304 1353 - Start
140304 1459 - End
work time : 0106
break time : 0000
140307 1248 - Start
140307 1353 - End
work time : 0105
break time : 0000
140321 1101 - Start
140321 1306 - Have a break now
140321 1342 - Back to work
140321 1423 - Have a break now - Go eat
140321 1522 - Back to work
140321 1522 - End
work time : 0246
break time : 0135
所以我需要获得每个“工作时间”值并一起计算它们。
我试过谷歌搜索,但我不知道如何开始。
答案 0 :(得分:0)
Applescript的文本项目分隔符(TID)非常适合这一点。我们只需将TID设置为您想要抓取的数字之前的文本即可将文本分解为列表,在本例中为#34;工作时间"。然后我只是抓住TID之后的下一个字,因为那是数字。这很容易。您的示例的结果是457.我的脚本返回总和加上显示用于计算总和的所有值:{457,{" 0106"," 0105"," 0246"}}
set workLog to "140304 1353 - Start
140304 1459 - End
work time : 0106
break time : 0000
140307 1248 - Start
140307 1353 - End
work time : 0105
break time : 0000
140321 1101 - Start
140321 1306 - Have a break now
140321 1342 - Back to work
140321 1423 - Have a break now - Go eat
140321 1522 - Back to work
140321 1522 - End
work time : 0246
break time : 0135"
set beforeText to "work time"
set AppleScript's text item delimiters to beforeText
set textItems to text items of workLog
set AppleScript's text item delimiters to ""
set theSum to 0
set sumItems to {}
repeat with i from 2 to count of textItems
set workTime to word 1 of (item i of textItems)
set end of sumItems to workTime
set theSum to theSum + (workTime as number)
end repeat
return {theSum, sumItems}
现在只需用我的代码替换代码中的第一行,它就可以在您的日志文件中使用。祝你好运。
set workLog to read (choose file)
答案 1 :(得分:0)
这是基于do shell script
的替代@ regulus6633的纯AppleScript答案:
注意:我不确定您的工作时间数字如0106
代表什么 - 这里我只是假设它们是十进制整数来进行求和。
set logFile to "/Users/jdoe/hours.log" # Replace with POSIX path to your log file
set total to do shell script ¬
"awk '/^work time :/ { total+=$4 } END { print total }' " ¬
& quoted form of logFile
shell命令使用awk
,这极大地简化了解析。