Ruby on rails 在文件中查找字符串,并使用ruby返回字符串前面的值

Ruby on rails 在文件中查找字符串,并使用ruby返回字符串前面的值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在学习ruby。我试图读取一个文件,找到一个字符串,然后返回字符串前面的值 我试过这个: line = "ALTER TABLE schemaname.tablename MODIFY col1 number(19,0)" bol1 = line.include?("MODIFY") puts "{#bol1}" if bol1 = "true" if line =~ /ALTER TABLE/ then drop_found = "true" location =

我正在学习ruby。我试图读取一个文件,找到一个字符串,然后返回字符串前面的值

我试过这个:

line = "ALTER TABLE schemaname.tablename MODIFY col1 number(19,0)"
bol1 = line.include?("MODIFY")
puts "{#bol1}" 

if bol1 = "true"
  if line =~ /ALTER TABLE/ then
    drop_found = "true"
    location = line.index("ALTER TABLE") + 11
    subline = line[location..-1]
    sublineParts = subline.split(" ")
    tableName = sublineParts[0]
    puts " found modify column on {#tableName}"
   end
   else
     puts " no modify found"
   end

我这里没有任何输出
bol1=line.include?(“MODIFY”)
不返回任何内容。请提供帮助。

一些错误/样式问题:

  • 在条件语句中使用赋值等于
    bol1=“true”
    应该是
    bol1==“true”
    但是:
  • 您正在检查
    .include?
    函数是否返回字符串
    “true”
    您应该检查该值是否为true。(
    bol1==true
    或只是
    if(bol1)
    )这就是为什么您没有得到预期的值
  • 但不是永远
  • 如果要使用
    ,那么它会关闭If语句,If语句不需要结束,除非它完全独立
    else
    也将关闭
    if
  • 您缺少底部的结束
    结尾
  • 您尝试将
    “{{bol1}”放入
    ,而不是
    “{bol1}”
    ,后者是。(您可以将bol1放入
    中,这样会更容易。无需使用
    {}
我得到的程序的工作版本是:

line = "ALTER TABLE schemaname.tablename MODIFY col1 number(19,0)"
bol1 = line.include?("MODIFY")
puts bol1

if (bol1)
  if (line =~ /ALTER TABLE/)
    drop_found = true
    location = line.index("ALTER TABLE") + 11
    subline = line[location..-1]
    sublineParts = subline.split(" ")
    tableName = sublineParts[0]
    puts " found modify column on {#tableName}"
  else
    puts " no modify found"
  end
end

也许这个问题可以帮助你:请一次问一个问题,说明你在哪里卡住了,你尝试了什么代码。请检查第二个if块中有许多未使用的变量。这是故意的吗?@0012,这不是故意的。我就这样试过了,滚回去。从你的问题中删除那么多内容会使它偏离主题并使答案无效。这很有效。。感谢您的帮助和解释@0112不客气。学习ruby祝你好运。@shriBin因为你有两个嵌套的if块,你也应该使用and语句,比如
if(bol1&&line=~/ALTER TABLE/)
。我不知道你这样做是否有具体的原因。只是一个建议。