完美解决go Fscanf 在读取文件时出现的问题

 更新时间:2021年03月22日 10:59:32   作者:烟雨任大  
这篇文章主要介绍了完美解决go Fscanf 在读取文件时出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

先要明白Fscanf的工作原理

Fscanf在遇到\n才结束

遇到\r时就会把\r替换成0

这就有个问题,要注意自己的文本换行符是什么,在Windows下就是\r\n,在Linux,Mac下就是\n,也就是说这里有个坑,

代码在Linux和Mac下读取数据文件是正常的,在Windows下就会遇到各种行末尾有个0,网上办法用什么替换啊,用什么自定义Scan函数啊,太麻烦了,直接使用自带IDE将打开的数据文件集换行符改成LF(Linux,Mac换行符)就行了

如下图Idea

文件右下角LF点击就可以更换换行符

补充:go中的Fscanf读到0的问题

今天在使用Fscanf读矩阵的时候遇到了一个问题,发现每次遇到换行,就多读一个0的问题

func readMaze(filename string) [][]int {
 file, err := os.Open(filename)
 if err != nil {
 panic(err)
 }
 var row,col int
 fmt.Fscanf(file, "%d %d", &row, &col)
 maze := make([][]int, row)
 for i := range maze {
 maze[i] = make([]int, col)
 for j := range maze[i] {
  fmt.Fscanf(file,"%d",&maze[i][j])
 }
 }
 return maze
}

分析得出这是由于windows下的格式导致的,在windows下的换行符是\r\n,所以遇到\r会读一个0进去,在linux下换行符只有\n

解决方法1

直接通过修改ide的格式即可,在goland的下方修改:

改成LF即为linux,这种方法我试了没成功,不知道是不是电脑的原因,可以先试一下这种方法

解决方法2

如果是不能避免,那就把这个0读出来,然后扔掉即可,可以在每行后面,多根一句话:

fmt.Fscanf(file,"%d")

解决方法3

使用方法

fmt.Fscan(file,&maze[i][j])

不规定格式的情况下是不会出现多读0

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • 详解Go如何基于现有的context创建新的context

    详解Go如何基于现有的context创建新的context

    在 Golang 中,context 包提供了创建和管理上下文的功能,那么在GO语言中如何基于现有的context创建新的context,下面小编就来和大家详细聊聊
    2024-01-01
  • Go语言编程实现支持六种级别的日志库 

    Go语言编程实现支持六种级别的日志库 

    这篇文章主要为大家介绍了使用Golang编写一个支持六种级别的日志库示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Go语言interface 与 nil 的比较

    Go语言interface 与 nil 的比较

    在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。
    2017-08-08
  • go NewTicker的用法示例代码

    go NewTicker的用法示例代码

    在 Go 语言中,time.NewTicker函数用于创建一个周期性触发的定时器,这篇文章主要介绍了go NewTicker的使用,需要的朋友可以参考下
    2023-07-07
  • Golang反射模块reflect使用方式示例详解

    Golang反射模块reflect使用方式示例详解

    Golang的反射功能,在很多场景都会用到,最基础的莫过于rpc、orm跟json的编解码,更复杂的可能会到做另外一门语言的虚拟机,这篇文章主要介绍了Golang反射模块reflect使用方式探索,需要的朋友可以参考下
    2023-01-01
  • Go连接并操作SQLite数据库基本步骤

    Go连接并操作SQLite数据库基本步骤

    在这篇文章中,我们将详细描述如何在 Go 语言中使用 SQLite 数据库,我们将会从如何在 Go 中安装和使用 SQLite 驱动包开始讲起,然后逐步介绍如何创建数据库连接,执行 SQL 查询,处理返回的数据以及关闭数据库连接
    2024-01-01
  • Go语言建议多使用切片少使用数组原理探究

    Go语言建议多使用切片少使用数组原理探究

    这篇文章主要为大家介绍了Go语言建议多使用切片少使用数组原理探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • go语言题解LeetCode1122数组的相对排序

    go语言题解LeetCode1122数组的相对排序

    这篇文章主要为大家介绍了go语言题解LeetCode1122数组的相对排序,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 使用Go构建一款静态分析工具Owl详解

    使用Go构建一款静态分析工具Owl详解

    Owl是一款开源项目依赖分析工具,可以快速在指定的项目目录下查找符合某些特征的源代码文件或者依赖文件,这篇文章主要介绍了使用Go构建一款静态分析工具,需要的朋友可以参考下
    2022-06-06
  • go语言题解LeetCode1275找出井字棋的获胜者示例

    go语言题解LeetCode1275找出井字棋的获胜者示例

    这篇文章主要为大家介绍了go语言题解LeetCode1275找出井字棋的获胜者示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论