【问题标题】:Confused about FileReadLine returning nothing对 FileReadLine 什么都不返回感到困惑
【发布时间】:2014-05-11 21:59:39
【问题描述】:

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

这三个字符串用于工具提示显示上下,size是表情符号的数量,Line是当前表情符号,pg up和dn循环,end类型表情符号。到目前为止,我对为什么没有文件读取行将字符串设置为空感到困惑。什么都没有,甚至连 End 块都没有,工作。

#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

【问题讨论】:

  • 你想达到什么目的?请发布一个示例文件并说明您要从中检索的内容。

标签: autohotkey


【解决方案1】:

没什么太复杂的,只是需要做一些更改。

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

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

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

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

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

【讨论】:

  • 谢谢!这样可行。此外,每次按键后我都会退出循环,因此行一直设置为 1。
猜你喜欢
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
相关资源
最近更新 更多