Html 如何在Ruby中附加到文件中的特定位置?
我试图创建一个网页,以便能够在线销售物品,但在创建一个文件以自动创建一个新项目时遇到了一个问题。我试图使用Ruby暂时删除文件的结尾,在文件中添加正确的行,然后将结尾放回原处。到目前为止,我的代码是Html 如何在Ruby中附加到文件中的特定位置?,html,ruby,Html,Ruby,我试图创建一个网页,以便能够在线销售物品,但在创建一个文件以自动创建一个新项目时遇到了一个问题。我试图使用Ruby暂时删除文件的结尾,在文件中添加正确的行,然后将结尾放回原处。到目前为止,我的代码是 puts "what is the item number?" item_num = gets.chomp puts "what is item description?(not optional)" desc = gets.chomp file_text = File.read("templat
puts "what is the item number?"
item_num = gets.chomp
puts "what is item description?(not optional)"
desc = gets.chomp
file_text = File.read("template.html")
file_text = file_text.gsub(/Item#/, "Item #{item_num.to_s}")
file_text = file_text.gsub(/<img class="item-image" src="">/, '<img class="item-image" src="' + item_num.to_s + '">')
file_text = file_text.gsub(/Item-desc/, desc)
puts file_text
file_create = File.new(item_num.to_s + ".html", "w")
file_create.puts(file_text)
file_create.close
item_page_end = '
</div>
<div class="col-sm-12">
<div class="headings">
</div>
</div>
</div>
</div>
</div>
<div class="footer" style="width=80%"/>
<script src="../js/jquery-3.1.1.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/owl.carousel.min.js"></script>
<script src="https://use.fontawesome.com/55b73bf748.js"></script>
<script src="../js/jquery.magnific-popup.js"></script>
<script src="../js/script.js"></script>
</body>
</html>
'
file_to_update = File.read("item_page.html")
file_to_update = file_to_update.gsub(item_page_end, "")
file_to_update = File.open("item_page.html", "a+")
file_to_update.puts( '<p class="col-md-4"><img src="../images/' + item_num + '.jpg" />Item' + item_num + '</p>')
file_to_update.puts(item_page_end)
sleep 10
显示“项目编号是多少?”
item_num=gets.chomp
放置“什么是项目描述?(非可选)”
desc=get.chomp
file\u text=file.read(“template.html”)
file_text=file_text.gsub(/Item#/,“Item#{Item_num.to_s}”)
file_text=file_text.gsub(//,“”)
file_text=file_text.gsub(/Item desc/,desc)
将文件放入文本
file\u create=file.new(项号为“.html”,“w”)
文件\u创建.put(文件\u文本)
文件\u create.close
第页项目
'
file\u to\u update=file.read(“item\u page.html”)
file_to_update=file_to_update.gsub(项目页面结束,“”)
file\u to\u update=file.open(“item\u page.html”,“a+”)
文件\u to_update.puts('p class=“col-md-4”>Item'+Item\u num+''))
文件\u到\u更新.put(项目\u页面\u结束)
睡眠10
HTML文件是:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SHS Metal | Store</title>
<link rel="shortcut icon" type="image/x-icon" href="../images/logo-icon.png"/>
<link href="../css/bootstrap.min.css" rel="stylesheet">
<link href="../css/bootstrap-theme.min.css" rel="stylesheet">
<link href="../css/owl.carousel.css" rel="stylesheet">
<link href="../css/owl.theme.default.min.css" rel="stylesheet">
<link href="../css/magnific-popup.css" rel="stylesheet">
<link href="../css/style.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="main element">
<div class="container">
<div class="row">
<div class="col-sm-12">
<h2 class="title mt80">Store</h2>
</div>
<div class="col-sm-12">
<div class="headings">
</div>
</div>
</div>
</div>
</div>
<div class="footer" style="width=80%"/>
<script src="../js/jquery-3.1.1.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/owl.carousel.min.js"></script>
<script src="https://use.fontawesome.com/55b73bf748.js"></script>
<script src="../js/jquery.magnific-popup.js"></script>
<script src="../js/script.js"></script>
</body>
</html>
SHS金属库
百货商店
最后,程序将要添加到“item\u page.HTML”文件的HTML行插入到末尾,然后在末尾添加“item\u page\u end”字符串。有人知道如何修复它吗?把HTML行放在Ruby程序中
<h2 class="title mt80">Store</h2>
存储
我找到的任何其他解决方案要么是针对数组、字符串,要么就是根本不起作用。如果您可以编辑HTML文件,我会看到两个可能的答案: (请注意,在所有情况下,我都使用一个名为
add_all_elements
的函数,该函数只返回您想要放在文件中的任何内容。)
buffer = File.read("template_first_half.html")
buffer += add_all_elements()
buffer += File.read("template_second_half.html")
file_to_update = File.read("item_page.html")
file_to_update = file_to_update.sub(/(?<=<h2 class="title mt80">Store<\/h2>)/,file_text)
File.write("item_page.html",file_to_update)
它很容易使用,但HTML可能很难阅读buffer = File.read("template.html")
buffer = buffer.gsub("#####anchor#####", add_all_elements())
同样更易于使用,它将要求您在文件中放置一个唯一的子字符串。问题是引用在文件中必须是绝对唯一的。优点是HTML文件仍然易于阅读line_num = 0
buffer = ''
break_point = 42
text.each_line do |line|
if line_num == break_point
buffer += add_all_elements()
end
buffer += line
line_num += 1
end
基本上,您逐行读取文件并将其放入缓冲区。当行计数达到所需的值(这里是我设置为42的变量break_point
)时,将所有元素插入缓冲区
不方便的是,如果编辑文件,每次都必须重新设置断点。您还可以使用字符串作为断点来避免大部分问题。您可以执行以下操作:
buffer = File.read("template_first_half.html")
buffer += add_all_elements()
buffer += File.read("template_second_half.html")
file_to_update = File.read("item_page.html")
file_to_update = file_to_update.sub(/(?<=<h2 class="title mt80">Store<\/h2>)/,file_text)
File.write("item_page.html",file_to_update)
file\u to\u update=file.read(“item\u page.html”)
file_to_update=file_to_update.sub(/(?这会比拥有3个文件容易吗?header.html
,product.html
,footer.html
,其中1和3是静态的,第二个是您生成的?最终输出是这3个文件的串联?@Anthony是的,这实际上会起作用。但是您如何选择主文件项_page.html中的所有内容来重放将它与连接的3个文件连接起来?(我是一个非常年轻的程序员,没有多少知识,如果我问了一个愚蠢的问题,请原谅我)这听起来像是一个错误。你的解决方案不太可行。相反,听起来你需要后退一步,重新思考这个问题。以这种方式修改现有的HTML很容易出错。像HAML或ERB这样的模板引擎会使它更容易,允许你在生成页面时以编程方式将内容插入到页面中。这会起作用,但实际情况如何您在2中使用的“锚定”是否选择了文件中的所有内容?不,这只是您添加的字符的特殊组合,并且您知道它是唯一的(您不希望gsub多次替换或替换错误的字符)。它允许您将您不需要的代码放置在正确的位置我在这里使用此方法: