草庐IT

file - 转到 : concatenate file contents

coder 2023-06-29 原文

我目前正在学习如何使用 Go(或 golang)进行开发,但我遇到了一个奇怪的问题:

我尝试创建一个查看 HTML 文件内部的脚本,以获取每个 标记的所有来源。 该脚本的目标是合并所有检索到的文件。

所以,这就是故事:现在,我能够获取每个 JavaScript 文件的内容,但是......我无法连接它们......

你可以在下面看到我的脚本:

//Open main file
mainFilePath := "/path/to/my/file.html"
mainFileDir := path.Dir(mainFilePath)+"/"

mainFileContent, err := ioutil.ReadFile(mainFilePath)

if err == nil {
    mainFileContent := string(mainFileContent)
    var finalFileContent bytes.Buffer

    //Start RegExp searching for JavaScript src
    scriptReg, _ := regexp.Compile("<script src=\"(.*)\">")
    scripts := scriptReg.FindAllStringSubmatch(mainFileContent,-1)

    //For each SRC found...
    for _, path := range scripts {
        //We open the corresponding file
        subFileContent, err := ioutil.ReadFile(mainFileDir+path[1])

        if err == nil {
            //And we add its content to the "final" variable
            fmt.Println(finalFileContent.Write(subFileContent))
        } else {
            fmt.Println(err)
        }
    }

    //Try to display the final result
    // fmt.Println(finalFileContent.String())
    fmt.Printf(">>> %#v", finalFileContent)
    fmt.Println("Y U NO WORKS? :'(")

} else {
    fmt.Println(err)
}

因此,每个 fmt.Println(finalFileContent.Write(subFileContent)) 都显示类似 6161 的内容,所以我假设 Write()方法被正确执行。

但是 fmt.Printf(">>> %#v", finalFileContent) 什么都不显示。绝对没有(甚至“>>>”都没有显示!)上面的注释行也是一样的。

有趣的是字符串"Y U NO WORK ? :'(" 正确显示...

你知道为什么吗? 你知道如何解决这个问题吗?

提前致谢!

最佳答案

您忽略了一些错误。当您运行以下版本的代码时,结果如何?

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "path"
    "regexp"
)

func main() {
    //Open main file
    mainFilePath := "/path/to/my/file.html"
    mainFileDir := path.Dir(mainFilePath) + "/"

    mainFileContent, err := ioutil.ReadFile(mainFilePath)

    if err == nil {
        mainFileContent := string(mainFileContent)
        var finalFileContent bytes.Buffer

        //Start RegExp searching for JavaScript src
        scriptReg, _ := regexp.Compile("<script src=\"(.*)\">")
        scripts := scriptReg.FindAllStringSubmatch(mainFileContent, -1)

        //For each SRC found...
        for _, path := range scripts {
            //We open the corresponding file
            subFileContent, err := ioutil.ReadFile(mainFileDir + path[1])

            if err == nil {
                //And we add its content to the "final" variable

                // fmt.Println(finalFileContent.Write(subFileContent))
                n, err := finalFileContent.Write(subFileContent)
                fmt.Println("finalFileContent Write:", n, err)

            } else {
                fmt.Println(err)
            }
        }

        //Try to display the final result
        // fmt.Println(finalFileContent.String())

        // fmt.Printf(">>> %#v", finalFileContent)
        n, err := fmt.Printf(">>> %#v", finalFileContent)
        fmt.Println()
        fmt.Println("finalFileContent Printf:", n, err)

        fmt.Println("Y U NO WORKS? :'(")

    } else {
        fmt.Println(err)
    }
}

更新:

声明:

fmt.Println("finalFileContent Printf:", n, err)

输出:

finalFileContent Printf: 0 write /dev/stdout: winapi error #8

finalFileContent Printf: 0 write /dev/stdout: Not enough storage is available to process this command.

来自 MSDN:

ERROR_NOT_ENOUGH_MEMORY

8 (0x8)

Not enough storage is available to process this command.

Windows 控制台的格式化输出溢出缓冲区(大约 64KB)。

有一个相关的 Go open issue:

Issue 3376: windows: detect + handle console in os.File.Write

关于file - 转到 : concatenate file contents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785590/

有关file - 转到 : concatenate file contents的更多相关文章

  1. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  2. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  3. ruby CSV : How can I read a tab-delimited file? - 2

    CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|

  4. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  5. ruby - Sinatra set cache_control to static files in public folder编译错误 - 2

    我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.

  6. ruby - __FILE__ == $PROGRAM_NAME 在 ruby​​ 中是什么意思? - 2

    这个问题在这里已经有了答案:Whatdoes`if__FILE__==$0`meaninRuby(6个答案)关闭6年前。我在审查Ruby代码时偶然发现了这个语法。代码是:if__FILE__==$PROGRAM_NAME#somecode...end我想__FILE__是一个变量,可以让我获取我所在文件的名称?但是$PROGRAM_NAME简化了什么?另外,为什么这个if语句是必需的,因为程序可以使用或不使用它?

  7. ruby - File.read ("| echo mystring") 是如何工作的? - 2

    我在我正在处理的一些代码中发现了这一点。它旨在解决从磁盘读取key文件的要求。在生产环境中,key文件的内容位于环境变量中。旧代码:key=File.read('path/to/key.pem')新代码:key=File.read('|echo$KEY_VARIABLE')这是如何工作的? 最佳答案 来自IOdocs:Astringstartingwith“|”indicatesasubprocess.Theremainderofthestringfollowingthe“|”isinvokedasaprocesswithappro

  8. ruby - 如何通过 Rubocop 指示打开 & :read as argument to File. - 2

    我有这个代码File.open(file_name,'r'){|file|file.read}但是Rubocop发出警告:Offenses:Style/SymbolProc:Pass&:readasargumenttoopeninsteadofablock.你是怎么做到的? 最佳答案 我刚刚创建了一个名为“t.txt”的文件,其中包含“Hello,World\n”。我们可以按如下方式阅读。File.open('t.txt','r',&:read)#=>"Hello,World\n"顺便说一下,由于第二个参数的默认值是'r',所以这样

  9. ruby - Chef : Read variable from file and use it in one converge - 2

    我有以下代码,它下载一个文件,然后将文件的内容读入一个变量。使用该变量,它执行一个命令。这个配方不会收敛,因为/root/foo在编译阶段不存在。我可以通过多个聚合和一个来解决这个问题ifFile.exist但我想用一个收敛来完成它。关于如何做到这一点有什么想法吗?execute'download_joiner'docommand"awss3cps3://bucket/foo/root/foo"not_if{::File.exist?('/root/foo')}endpassword=::File.read('/root/foo').chompexecute'join_domain'd

  10. ruby-on-rails - 我需要从 HTML 转到 markdown,有什么建议吗? - 2

    我正在使用Maruku,将Markdown(超集)转换为HTML,你知道我该怎么做才能从HTML转换为Markdown吗? 最佳答案 Google发现了一个名为reverse_markdown的ruby​​脚本.它似乎可以满足您的需求。 关于ruby-on-rails-我需要从HTML转到markdown,有什么建议吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/175162

随机推荐