SGML替换标记,并在Ruby中写入新的和不同的文件

SGML替换标记,并在Ruby中写入新的和不同的文件,ruby,sgml,Ruby,Sgml,我有一个很长的SGML文件,我需要将其转换为另一种语法,但由于某些原因,我的代码无法工作,当我得到输出时,它是完全相同的文档,代码如下所示: #!usr/bin/env ruby def replaceStrings(toChange) ##Remove Title tags and replace with the correct toChange.gsub(/<title>/) { "=====" } toChange.gsub(/<\/title&g

我有一个很长的SGML文件,我需要将其转换为另一种语法,但由于某些原因,我的代码无法工作,当我得到输出时,它是完全相同的文档,代码如下所示:

#!usr/bin/env ruby 

def replaceStrings(toChange)

  ##Remove Title tags and replace with the correct 
  toChange.gsub(/<title>/) { "====="  }
  toChange.gsub(/<\/title>/) { "====="  }

  ##Image
  toChange.gsub(/<graphic fileref="/) { "{{"  }
  toChange.gsub(/<\/graphic>/) { "|}}"  }
  toChange.gsub(/;" scale="60">/) { ""  }

  ##Paragraphs
  toChange.gsub(/<para>/) { ""  }
  toChange.gsub(/<\/para>/) { ""  }

  puts toChange

end

fileInput = ARGV[0]
fileOutput = ARGV[1]

document = File.readlines(fileInput)
puts fileInput
puts fileOutput
document.each { |e|  replaceStrings(e)}

File.new(fileOutput, 'w')
File.open(fileOutput, 'w'){
  |f| f.write(document)
}
#!usr/bin/env ruby
def替换字符串(toChange)
##移除标题标签并替换为正确的标签
toChange.gsub(//){“===”}
toChange.gsub(//){“===”}
##形象
toChange.gsub(//){“}
##段落
toChange.gsub(//){“}
toChange.gsub(//){“}
改变
结束
fileInput=ARGV[0]
fileOutput=ARGV[1]
document=File.readlines(fileInput)
放置文件输入
放置文件输出
document.each{e|replaceStrings(e)}
File.new(fileOutput,“w”)
打开(fileOutput,“w”){
|f | f.write(文件)
}
就我所知,我确实调用了replaceString方法,但我是否遗漏了什么或做了什么错误的事情

注意:我是Ruby的新手,你想使用gsub吗

此外,无需使用块形式:

toChange.gsub!(/<title>/, "=====")

I+1的seph的答案是:您将结构化文件视为纯文本——虽然这可能完全按照您的意愿工作,但在我看来,实际的转换将更加可靠和精确。对于真正简单的SGML文件,这可能并不重要——只是需要注意的一些事情。
File.open(fileOutput, 'w') do |f|
  f.write(document)
end