英文:
how to read a file as input and use its content in golang?
问题
你好!以下是关于如何读取文本文件(.txt)并使用其内容的解释:
要读取文本文件并将其内容作为输入,你可以使用编程语言中的文件读取功能。根据你提到的命令go run script.go < file.txt
,我猜测你正在使用Go语言。
在Go语言中,你可以使用os
包中的Open
函数打开文件,然后使用bufio
包中的Scanner
类型来逐行读取文件内容。下面是一个示例代码:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 打开文件
file, err := os.Open("file.txt")
if err != nil {
fmt.Println("无法打开文件:", err)
return
}
defer file.Close()
// 创建一个Scanner来读取文件内容
scanner := bufio.NewScanner(file)
// 逐行读取文件内容
for scanner.Scan() {
line := scanner.Text()
// 在这里可以对每一行的内容进行处理
fmt.Println(line)
}
if err := scanner.Err(); err != nil {
fmt.Println("读取文件时发生错误:", err)
}
}
你可以将上述代码保存为script.go
文件,然后在终端中运行go run script.go < file.txt
命令来读取file.txt
文件的内容。
希望这能帮到你!如果还有其他问题,请随时提问。
英文:
can someone explain me how to read a text file (.txt) as the input and use its content?<br />
have to run this command:<br/>
go run script.go < file.txt
<br />
can't find nothing that could help me, even after many researches on the internet!<br />
thanks in advance<br/>
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
答案1
得分: 3
你可以从标准输入(stdin)中读取内容。当你使用'<'符号时,简单地表示STDIN。
在Go语言中,要从标准输入中读取内容,你需要使用os.Stdin预打开的文件描述符。
以下代码应该可以工作:
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
)
func main() {
const readBufLen = 1024
reader := bufio.NewReader(os.Stdin)
readBuf := make([]byte, readBufLen)
content := make([]byte, 0, readBufLen)
for {
n, err := reader.Read(readBuf)
if err != nil && err != io.EOF {
log.Fatal(err)
}
if n != 0 {
content = append(content, readBuf[:n]...)
}
if err == io.EOF {
break
}
}
fmt.Printf("%s\n", content)
}
英文:
You can read from stdin. When you use '<' it is simple means STDIN.
To read from STDIN in Go you need to use os.Stdin pre-opened file descriptor.
This code should work:
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
)
func main() {
const readBufLen = 1024
reader := bufio.NewReader(os.Stdin)
readBuf := make([]byte, readBufLen)
content := make([]byte, 0, readBufLen)
for {
n, err := reader.Read(readBuf)
if err != nil && err != io.EOF {
log.Fatal(err)
}
if n != 0 {
content = append(content, readBuf[:n]...)
}
if err == io.EOF {
break
}
}
fmt.Printf("%s\n", content)
}
答案2
得分: 3
使用io.ReadAll函数将os.Stdin的内容读取到一个[]byte
中。
根据应用程序的要求,使用slice表达式忽略stdin的前两个字节。
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
p, err := io.ReadAll(os.Stdin)
if err != nil {
log.Fatal(err)
}
// 根据应用程序的要求,移除前两个字节。
if len(p) >= 2 {
p = p[2:]
}
s := string(p)
fmt.Println(s)
}
英文:
Use io.ReadAll to slurp the contents of os.Stdin to a []byte
.
Use a slice expression ignore the first two bytes of stdin per application requirements,
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
p, err := io.ReadAll(os.Stdin)
if err != nil {
log.Fatal(err)
}
// remove first two bytes per application requirements.
if len(p) >= 2 {
p = p[2:]
}
s := string(p)
fmt.Println(s)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论