1.文本多行合并为一行

package main

import (
	"fmt"
	"io/ioutil"
	"strings"
)

func main() {
	content, err := ioutil.ReadFile("E:\\gin_demo\\demo30DNF\\youhua\\input.txt")
	if err != nil {
		fmt.Println("Error reading input file:", err)
		return
	}

	processedContent := strings.ReplaceAll(string(content), "\r\n", "")

	err = ioutil.WriteFile("E:\\gin_demo\\demo30DNF\\youhua\\output.txt", []byte(processedContent), 0644)
	if err != nil {
		fmt.Println("Error writing output file:", err)
		return
	}

	fmt.Println("Successfully removed newlines and saved to output.txt.")
}


2.文本中数据计算

package main

import (
	"bufio"
	"fmt"
	"log"
	"os"
	"strconv"
)

func main() {
	// 打开输入文件
	inputFile, err := os.Open("D:\\goproject\\src\\golang\\demo02\\input.txt")
	if err != nil {
		log.Fatal(err)
	}
	defer inputFile.Close()

	// 创建一个扫描器来读取输入文件
	scanner := bufio.NewScanner(inputFile)

	// 创建输出文件
	outputFile, err := os.Create("D:\\goproject\\src\\golang\\demo02\\out.txt")
	if err != nil {
		log.Fatal(err)
	}
	defer outputFile.Close()

	// 创建一个写入器来写入输出文件
	writer := bufio.NewWriter(outputFile)

	// 逐行处理输入文件内容
	for scanner.Scan() {
		// 将每行的字符串转换为浮点数
		numStr := scanner.Text()
		num, err := strconv.ParseFloat(numStr, 64)
		if err != nil {
			log.Println("无法解析数字:", numStr)
			continue
		}

		// 将数字乘以0.8
		result := num * 0.8

		// 将结果写入输出文件
		fmt.Fprintln(writer, result)
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}

	// 刷新缓冲区,确保所有数据被写入文件
	writer.Flush()
}


3.图找图

package main

import (
	"fmt"
	"github.com/kbinani/screenshot"
	"gocv.io/x/gocv"
	"image"
	"image/color"
	"image/jpeg"
	"log"
	"os"
	"time"
)

func saveImage(img *image.RGBA, fileName string) error {
	f, err := os.Create(fileName)
	if err != nil {
		return err
	}
	defer f.Close()

	jpeg.Encode(f, img, nil)

	return nil
}

func processScreenshot(tpl gocv.Mat) {
	for {
		img1, err := screenshot.Capture(0, 0, 800, 600)
		if err != nil {
			log.Fatal(err)
		}

		fileName := fmt.Sprintf("D:\\gin_demo\\photo\\demo1\\2.jpg")
		err = saveImage(img1, fileName)
		if err != nil {
			log.Fatal(err)
		}

		time.Sleep(time.Second)

		// 读取源图片和模板图片
		img := gocv.IMRead(fileName, gocv.IMReadColor)
		if img.Empty() || tpl.Empty() {
			panic("无法加载图片")
		}
		defer img.Close()

		// 创建输出结果矩阵
		result := gocv.NewMat()
		defer result.Close()

		// 进行模板匹配
		gocv.MatchTemplate(img, tpl, &result, gocv.TmCcoeffNormed, gocv.NewMat())

		// 获取匹配结果
		_, maxVal, _, maxLoc := gocv.MinMaxLoc(result)
		fmt.Println("max correlation value:", maxVal)

		// 设定一个阈值,判断是否匹配成功
		threshold := float32(0.8)
		if maxVal >= threshold {
			fmt.Printf("Found template at: %+v\n", maxLoc)
		} else {
			fmt.Println("Template not found.")
		}

		// 可以在源图片上标记出模板匹配的位置,这一步,可以删除
		if maxVal >= threshold {

			rect := image.Rect(maxLoc.X, maxLoc.Y, maxLoc.X+tpl.Cols(), maxLoc.Y+tpl.Rows())
			color := color.RGBA{R: 0, G: 0, B: 255, A: 0}
			gocv.Rectangle(&img, rect, color, 2)

			window := gocv.NewWindow("Template Match")
			window.IMShow(img)

			// 窗口等待时间
			window.WaitKey(1000)
			window.Close()
			break
		}

	}
}

func main() {
	// 读取模板图片
	tpl := gocv.IMRead("D:\\gin_demo\\photo\\demo1\\1.jpg", gocv.IMReadColor)
	if tpl.Empty() {
		panic("无法加载模板图片")
	}
	defer tpl.Close()

	processScreenshot(tpl)
}