读取golang文件并用大写替换单词搜索

时间:2014-07-17 13:14:26

标签: file-io go str-replace

我正在尝试搜索目录中文件中的特定单词,并将所有文件中的每个实例转换为大写。

我想跟踪找到该单词的文件以及它在这些文件中出现的时间。

到目前为止,我能够阅读该文件的内容 然后如何从main函数发送参数来搜索文件并将这些实例替换为大写?

这是我到目前为止所做的:

func visit(path string, fi os.FileInfo, err error) error {

    if err!=nil{
        return err
     }

     if !!fi.IsDir(){
        return nil //
     }

      matched, err := filepath.Match("*.txt", fi.Name())

      if err !=nil{
        fmt.Println(err)
        return err
      }

      if matched{
      read,err:= ioutil.ReadFile(path)
      fmt.Println(read)
      check(err)
      fmt.Println(path) }

  return nil
} 

func main() {

  err := filepath.Walk(".", visit)
}

1 个答案:

答案 0 :(得分:1)

您可以使用由callback filepath.Walk函数文字看到的变量作为闭包。
例如,请参阅" GOLANG: Walk Directory Tree and Process Files"。

func main() {

    var yourWord := "a word"

    callback := func(path string, fi os.FileInfo, err error) error {
            // do something with yourWord!
    }

    filepath.Walk(".", callback)

}

这意味着:

函数文字和闭包

  

可以在Go中声明匿名函数   函数文字是闭包:它们继承了声明它们的函数的范围   它们可以引用周围函数中定义的变量。然后,这些变量在周围函数和函数文本之间共享,只要它们可访问,它们就会存在。

在您的情况下,'回调' function literal将继承之前定义的变量yourWord


注意:要调用的函数是strings.ToUpper(),而不是strings.toUpper()