Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在Ruby中附加到文件中的特定位置?_Html_Ruby - Fatal编程技术网

Html 如何在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

我试图创建一个网页,以便能够在线销售物品,但在创建一个文件以自动创建一个新项目时遇到了一个问题。我试图使用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("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可能很难阅读

  • 您还可以在文件中添加引用并使用gsub替换它:

    buffer = File.read("template.html")
    buffer = buffer.gsub("#####anchor#####", add_all_elements())
    
    同样更易于使用,它将要求您在文件中放置一个唯一的子字符串。问题是引用在文件中必须是绝对唯一的。优点是HTML文件仍然易于阅读

  • 如果无法编辑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多次替换或替换错误的字符)。它允许您将您不需要的代码放置在正确的位置我在这里使用此方法: