AWK,Applescript,String / Int解析

时间:2016-09-10 03:28:33

标签: parsing awk applescript text-parsing string-parsing

这有点深入,我有点过头了。我从来没有使用过AWK,而且我尝试了解它的时间越多(或许它是时间已晚),它就越令人沮丧。

我正在尝试编写一个AppleScript脚本,以便在我的显示器上调整窗口大小。现在,我可以采用简单的方法并将我的显示器尺寸硬编码到脚本中,但我决定尝试动态地收集它们。我设法找到了一个解析plist并吐出ALMOST可用信息的代码片段,这里是AppleScript:

set screenInfo to do shell script "defaults read /Library/Preferences/com.apple.windowserver | awk '
        BEGIN { FS=\"= \" }
        /Active/  { screens++ }
        { gsub(\";\",\"\",$2) }
        /^ *OriginX/ { ox[screens] = $2 }
        /^ *OriginY/ { oy[screens] = $2 }
        /^ *Width/   { w[screens]  = $2 }
        /^ *Height/  { h[screens]  = $2 }
        END       {
                for (si=1;si<=screens;si++) {
                    print ox[si],oy[si],w[si],h[si]
                    }
            }'"
    return screenInfo
end getScreenInfo

那个工作得很好 - 在我的&#34;结果&#34;窗口,我得到以下内容:

"0 0 1920 1080  
\"-1600\" 0 1600 1200  
1920 0 1680 1050  
0 0 1920 1080  
\"-1600\" 0 1600 1200  
1920 0 1680 1050  
3600 1050 1024 768  "

第一个数字对是显示器左上角的坐标,第二个数字对是该显示器的分辨率。每个显示器都是这种情况 - 尽管显示器1-3的重复,加上鬼影监视器。我并不十分关心它,它应该是可以解析的。

我的问题出现在我尝试将这些数字解析为整数以便我可以使用它们时 - 使用类似set theVar to word 1 of paragraph 2 of theString as integer的内容,它会解析为1600,而不是-1600需要它。我尝试逐步浏览整个字符串,一次删除1个字符,但我认为这些只会显示在结果窗口中 - 当我display dialog时,它们不会显示。即使我没有尝试将其解析为整数,只需word 1 of paragraph 2它就会忽略-并返回"1600"。我怎么解析这个?天哪,我现在不是苹果的粉丝。

1 个答案:

答案 0 :(得分:3)

您可以使用AppleScriptObjC

获取屏幕分辨率
use framework "Foundation"

set screenFrames to {}
set screens to current application's NSScreen's screens()
repeat with aScreen in screens
    set end of screenFrames to aScreen's frame() as record
end repeat

screenFrames将包含每个屏幕的记录,其中包含originx成员的记录y以及sizewidth height 1}}成员。

例如,您可以使用

获取屏幕1的宽度
set screen1Width to width of |size| of item 1 of screenFrames as integer