读取一个文本文件,替换其中的单词,输出到另一个文本文件

2024-05-05

所以我试图在 GO 中编写一个程序来获取一个充满代码的文本文件并将其转换为 GO 代码,然后将该文件保存到 GO 文件或文本文件中。我一直在试图弄清楚如何保存对文本文件所做的更改,但我可以看到更改的唯一方法是通过 println 语句,因为我正在使用 strings.replace 来搜索文本文件所在的字符串数组存储并更改需要更改的每个单词的出现(例如 BEGIN -> { 和 END -> })。那么,在 GO 中是否还有其他我不知道的搜索和替换方法,或者是否有方法可以编辑我不知道的文本文件,或者这是不可能的?

Thanks

这是我到目前为止的代码。

package main

import (
    "os"
    "bufio"
    "bytes"
    "io"
    "fmt"
    "strings"
)


func readLines(path string) (lines []string, errr error) {
    var (
        file *os.File
        part []byte
        prefix bool
    )
    if file, errr = os.Open(path); errr != nil {
        return
    }
    defer file.Close()

    reader := bufio.NewReader(file)
    buffer := bytes.NewBuffer(make([]byte, 0))
    for {
        if part, prefix, errr = reader.ReadLine(); errr != nil {
            break
        }
    buffer.Write(part)
        if !prefix {
            lines = append(lines, buffer.String())
            buffer.Reset()
        }
    }
    if errr == io.EOF {
        errr = nil
    }
    return
}

func writeLines(lines []string, path string) (errr error) {
    var (
        file *os.File
    )

    if file, errr = os.Create(path); errr != nil {
        return
    }
    defer file.Close()


    for _,item := range lines {

        _, errr := file.WriteString(strings.TrimSpace(item) + "\n");

        if errr != nil {

            fmt.Println(errr)
            break
        }
    }

    return
}

func FixBegin(lines []string) (errr error) {
    var(
    a string

    )
for i := 0; ; i++ {
        a = lines[i];

        fmt.Println(strings.Replace(a, "BEGIN", "{", -1))
    }

    return
}

func FixEnd(lines []string) (errr error) {
    var(
    a string

    )
for i := 0; ; i++ {
        a = lines[i];

        fmt.Println(strings.Replace(a, "END", "}", -1))
    }
    return
}

func main() {
    lines, errr := readLines("foo.txt")
    if errr != nil {
        fmt.Println("Error: %s\n", errr)
        return
    }
    for _, line := range lines {
        fmt.Println(line)
    }


    errr = FixBegin(lines)

    errr = writeLines(lines, "beer2.txt")
    fmt.Println(errr)

    errr = FixEnd(lines)
    lines, errr = readLines("beer2.txt")
    if errr != nil {
        fmt.Println("Error: %s\n", errr)
        return
    }
    errr = writeLines(lines, "beer2.txt")
    fmt.Println(errr)
}

jnml@fsc-r630:~/src/tmp/SO/13789882$ ls
foo.txt  main.go
jnml@fsc-r630:~/src/tmp/SO/13789882$ cat main.go 
package main

import (
        "bytes"
        "io/ioutil"
        "log"
)

func main() {
        src, err := ioutil.ReadFile("foo.txt")
        if err != nil {
                log.Fatal(err)
        }

        src = bytes.Replace(src, []byte("BEGIN"), []byte("{"), -1)
        src = bytes.Replace(src, []byte("END"), []byte("}"), -1)
        if err = ioutil.WriteFile("beer2.txt", src, 0666); err != nil {
                log.Fatal(err)
        }
}
jnml@fsc-r630:~/src/tmp/SO/13789882$ cat foo.txt 
BEGIN
  FILE F(KIND=REMOTE);
  EBCDIC ARRAY E[0:11];
  REPLACE E BY "HELLO WORLD!";
  WRITE(F, *, E);
END.
jnml@fsc-r630:~/src/tmp/SO/13789882$ go run main.go 
jnml@fsc-r630:~/src/tmp/SO/13789882$ cat beer2.txt 
{
  FILE F(KIND=REMOTE);
  EBCDIC ARRAY E[0:11];
  REPLACE E BY "HELLO WORLD!";
  WRITE(F, *, E);
}.
jnml@fsc-r630:~/src/tmp/SO/13789882$ 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取一个文本文件,替换其中的单词,输出到另一个文本文件 的相关文章

随机推荐

  • 如何检查函数参数的类型?

    我有一个正在构建功能的应用程序 marshal and apply 它调用一些其他函数 或函子 f有一些论据 marshal and apply的工作是根据参数的类型对参数应用一些特殊的编组f的参数 如果其中之一f的参数是特殊类型 mars
  • 动态调整文本区域大小以适应内容

    这是我使用 netbeans 放入程序中的文本区域 第一张图片显示了我运行程序时文本区域的样子 第二张图片显示了我按下按钮后的文本区域 该按钮将大约 50 个 Hello world 字符串添加到文本区域 仅显示前 6 个 我需要动态增加文
  • 为什么位图图像在 Retina 显示屏上看起来很模糊?

    我没有视网膜设备 但我在网上看到了这个讨论 我读过有关为具有 Retina 显示屏的设备提供 2 倍图像尺寸的解决方案 以确保位图不会变得模糊 但是 我不明白这是如何工作的 首先 正如我所读到的 我假设视网膜显示器的像素密度是四倍 二的平方
  • 如何从 SQLAlchemy 引擎实例获取连接 URL?

    我通过生成一个程序来开始一个程序URL http docs sqlalchemy org en rel 1 0 core engines html highlight url sqlalchemy engine url URL对象并将其传递
  • NoMethodError:未定义的方法“调用”

    运行以下测试套件时 require spec helper describe User do before user User name Example User email email protected cdn cgi l email
  • 有没有办法一次重新编码多个变量?

    我有一个学生成绩单分数的数据集 范围从 D 到 A 我想将它们重新编码为 1 12 的范围 即 D 1 D 2 A 11 A 12 现在我正在起诉revalue函数于plyr 我有几列想要重新编码 有没有比运行更短的方法来做到这一点reva
  • 如何允许用户对列表中的项目重新排序?

    我有一个 Android 应用程序 用户可以在其中将项目添加到列表中 并且我希望他们能够按照自己的意愿对列表中的项目进行重新排序 而不是仅仅向他们提供不同的排序顺序 为项目添加位置设置 它们来自数据库 很容易 但是用户可以使用哪种 UI 元
  • 如何制作全屏java小程序?

    我正在用 Java 小程序设计一个心理学实验 我必须让我的 java 小程序全屏显示 执行此操作的最佳方法是什么以及我该如何执行此操作 由于我已经 3 年没有使用 java applet 我上次使用它是为了课程作业 我已经忘记了大部分概念
  • 如何在android sdk中从图库中获取图像并将其显示到屏幕上

    我想知道如何从图库中获取预先保存的图像 然后将其显示到屏幕上 任何教程 有用的链接和信息将不胜感激 如果您希望我进一步解释任何内容 请询问 Intent photoPickerIntent new Intent Intent ACTION
  • 使用 @abstractproperty 和 @abstractmethod 实现/覆盖的实际差异

    考虑一个抽象基类 它具有您希望每个后续子类重写的函数 使用 abc 模块和 ABCMeta 装饰有 abstractproperty or abstractmethod实际上强制子类 开发人员实现创建装饰器指定的函数类型 根据我的实验 您可
  • opencv如何使用compareHist函数

    img cv2 imread mandrill png histg cv2 calcHist img 0 None 256 0 256 if len sys argv lt 2 print gt gt sys stderr Usage sy
  • 为什么百分比边距会导致换行?

    div style background color dd3fb8 a style margin left 10 a a a b a a c a div 在上面的示例中 字母 c 将在新行上 但如果我将 margin left 设置为px单
  • 浏览器多个选项卡中的不同连接

    为什么 SignalR 在浏览器的多个选项卡中为同一登录用户建立不同的连接 有没有一种方法可以为同一浏览器中打开的所有选项卡建立一个连接 我所说的连接是指 SignalR 中用户的连接 ID 因为同一浏览器的不同选项卡是不同的文档 进程 每
  • Bash 脚本重定向不起作用,为什么? [复制]

    这个问题在这里已经有答案了 我最近在 bash 脚本中发现了意外行为 我想在解决它之前先了解它 这是一个简化的示例 bin sh SCRIPT tmp echoscript sh gt gt tmp log bin sh SCRIPT ec
  • 无法使用 jcenter 解决 Android Studio 中的依赖关系

    为什么我的程序在 android studio 中解决应用程序调试的依赖关系时挂起 我无法解决任何图书馆问题 这是我的根 gradle 文件 buildscript repositories jcenter dependencies cla
  • R,闪亮,应用程序之前的弹出窗口

    我正在开发一个闪亮的应用程序 它可以在启动时访问 MySQL 服务器并从中提取大量数据 这些数据稍后会在使用应用程序期间被过滤 由于传输的数据量相当大 第一个查询需要花费很多时间 这就是为什么我想创建一个对话框 弹出窗口或类似的东西 在应用
  • ComponentOne 3D 曲面地图的替代方案 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在为我们正在进行的一个新项目研究替代控制库 要求之一是以表面图的形式显示数据 如下面的 Comp
  • bool 数据类型之谜

    include
  • 在WebView中,有没有一种方法可以让shouldOverrideUrlLoading确定它是否正在捕获重定向还是用户单击链接?

    我希望允许重定向在 WebView 中自然发生 并且仅在用户单击某些内容时捕获新的 url 我有类似的问题 我需要在我的活动中的 WebView 中打开一个页面 但是 当用户单击页面中的链接时 我希望它在 新窗口 即浏览器活动 中打开 如果
  • 读取一个文本文件,替换其中的单词,输出到另一个文本文件

    所以我试图在 GO 中编写一个程序来获取一个充满代码的文本文件并将其转换为 GO 代码 然后将该文件保存到 GO 文件或文本文件中 我一直在试图弄清楚如何保存对文本文件所做的更改 但我可以看到更改的唯一方法是通过 println 语句 因为