#Persistent
#Include %A_ScriptDir%
#SingleInstance force
#NoEnv
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 1
SetKeyDelay, 150, 150, Play
SetControlDelay,0
iffut:="FUT"
SetTimer,datos,10
return
datos:
IfWinExist,DataTable ahk_class #32770
{
WinGetTitle,winname,DataTable
StringTrimLeft,winname,winname,11
IfInString,winname,%iffut%
{
StringTrimRight,winname,winname,8
}
ControlGet,dato,List,,SysListView321,DataTable
StringReplace, dato, dato, %A_Tab%, `,, All
StringReplace, dato, dato, %A_Space%, `,, All
IfInString,dato,%iffut%
{
;MsgBox,there
StringReplace, dato, dato, .{5}FUT, , All
}
FormatTime, mydttm, , ddMMyy_HHmmss
FileAppend,%dato%,%winname%_%mydttm%.txt
return
}
我不确定我做错了什么,但我需要更换" n"在我的控制器中使用1-9。我无法找到正确的方法来做到这一点。
答案 0 :(得分:2)
只需使用userInput.length()
表示法和字符串操作访问它:
Integer.parseInt("" + userInput.charAt(i))
如果做不到这一点,你也可以这样做:
[]
答案 1 :(得分:1)
这里有很多问题。
第一个已经解决的问题是,您需要send
来访问该值:
if @order.send(:"card_type#{n}") != "none" ...
第二个是字符串中的每个单独元素也以数字命名:
Card 1: #{@order.card_type1}
现在你将在整个循环中使用相同的值,因此你需要使用send
:
#{@order.send(:"card_type#{n}")}
第三,你可以使用heredoc清理巨大的字符串concat:
if @order.send(:"card_type{n}") != "none"
notes += <-EOS
Card 1: #{@order.card_type1}
Paper Weight: #{@order.paper_weight1}
Quantity: #{@order.quantity1}
Ink Color #1: #{@order.ink_color11}
Ink Color #2: #{@order.ink_color12}
Wording: #{@order.wording1}
Return Address Printing: #{@order.return_address1}
Guest Address Printing: #{@order.guest_address1.to_s}
Envelope Liners: #{@order.envelope_liners1}
EOS
end
第四,不要这样做,而是首先使用一个集合,并引入一些帮助方法,这些方法将显着清理主线代码。在这里,我使用PORO,但完全相同的机制适用。
我假设某种订单商品。为简洁起见,我缩短了属性数量:
class OrderItem
attr_accessor :type, :wording
def initialize(type, wording)
@type = type
@wording = wording
end
def valid_item?
type != 'none'
end
def item_info
<<-EOS
Card Type: #{type}
Wording: #{wording}
EOS
end
end
订单包含这些商品的集合。 (你可以通过各种方式限制为九种,这里没有反映出来。)
class Order
attr_accessor :items
def initialize(items)
@items = items
end
def valid_items
items.find_all &:valid_item?
end
end
在Rails应用程序中,每个都是ActiveRecord模型,存储在数据库中。
要模拟我手动创建的订单,并确保其中包含"none"
类型:
items = 4.times.collect { |n| OrderItem.new('not none', "wording #{n}") }
items[2].type = 'none'
order = Order.new(items)
获取包含非“无”类型的订单信息的字符串:
output = order.valid_items.collect(&:item_info).join("\n--\n")
如果你打印出来:
Card Type: not none
Wording: wording 0
--
Card Type: not none
Wording: wording 1
--
Card Type: not none
Wording: wording 3
请注意,我设置为“none”的订单项不会出现。
现在,我对命名(不知道你的域名)采取了自由,并且你需要进行各种调整(比如...为什么在Rails应用程序中生成文本输出),但这显示了一条可能的路径您可以采取清理代码,并减少理解主线代码所需的思考量。
即使您没有将订单项分开并坚持使用数字命名的订单属性,您仍然可以隔离令人困惑的代码以提取基于数字的属性,找出哪些是必要的(例如,旋转卡片类型并获取不是none
的数字数组,并使用它来访问所有其他字段。