对FileReadLine一无所知而感到困惑

时间:2014-05-11 00:52:51

标签: autohotkey

我正在制作一个脚本来从文件加载表情符号并打印出来,但是我很难让它工作,因为我从中读取的所有内容都是空白的。我是新人所以我确定我做错了什么,有人可以查看我的代码并告诉我它是什么吗? (绝对地址是对的)

三个字符串用于工具提示以显示上方和下方的内容,大小是表情符号的数量,Line是当前表情符号,pg up和dn循环,以及结尾类型表情符号。到目前为止,我很困惑为什么没有文件读取行将字符串设置为空。什么,甚至不是End Block,都可以。

#InstallKeybdHook
SendMode Event
#UseHook

File:= "C:\Users\Ben\Desktop\ahk\emoticons.txt"
Line := 0
size := 0
FileReadLine, string, %File%, %Line%
FileReadLine, string1, %File%, mod(%Line%-1, size)
FileReadLine, string2, %File%, mod(%Line%+1, size)

Loop, read, %File%
{
    size += 1
}

start:

ToolTip, %string%`n%string1%`n%string2%, 100, 100, 1

~PgUp::
{
    Line:=mod(%Line%+1, size)
    FileReadLine, string, %File%, %Line%
    FileReadLine, string1, %File%, mod(%Line%-1, size)
    FileReadLine, string2, %File%, mod(%Line%+1, size)
}
return

~PgDn::
{
    Line:=mod(%Line%-1, size)
    FileReadLine, string, %File%, %Line%
    FileReadLine, string1, %File%, mod(%Line%-1, size)
    FileReadLine, string2, %File%, mod(%Line%+1, size)
}
return

~End::
{
    FileReadLine, str, %File%, %Line%
    Send %str%
}
return

goto, start

1 个答案:

答案 0 :(得分:0)

没有什么太复杂,只需做一些改动。

  1. 对于FileReadLine,与其他语言不同,行数开始为1而不是0。因此,尝试阅读第0行,FileReadLine基本上不会“读”任何内容。

  2. 对于mod()函数,文档说:

      

    如果第二个参数为零,则该函数产生一个空白结果(空字符串)。

    逻辑上,当脚本启动且size0时,FileReadLine会尝试读取行号“空白”。我记得,“空白”不是数字。

  3. mod(%Line%-1, size)表达式。这意味着,所有内容都在这里被解析为表达式。如果成功,Mod()将像正常一样返回其计算值(考虑#2)。如果我们考虑%Line%-1,解析为表达式,这就是我们所拥有的:
    假设我们有var:=4var_b:=(%var%-1)。有人可能会认为var_b等于3,但这是错误的。在var_b:=(%var%-1)中,var的内容将被评估为变量的名称,然后是该变量的内容。这意味着它需要4并将其评估为名为4的变量而不是值4。除非已设置变量4,否则它将返回“空白”。我记得(再次),“空白”不是一个数字。在这种情况下,我想预期的表达式为mod(Line-1, size)