doujie3888 2016-08-01 05:50
浏览 169
已采纳

从Golang文件中读取特定字符

I want to read a text file character by character and print invalid input for those characters that exceed "H"and numbers that exceed "8". eg: my input is

I9,A2
A10,C3
D2,L3

output: invalid input for all three

package main

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

func readLines(path string) ([]string, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer file.Close()
    var lines []string
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        lines = append(lines, scanner.Text())
    }
    return lines, scanner.Err()
}

func main() {
    lines, err := readLines("chessin.txt")
    if err != nil {
        log.Fatalf("readLines: %s", err)
    }
    var numLines int = len(lines)
    for i := 0; i < numLines; i++ {
        for j := 0; j < len(lines[i]); j++ {
            if j > 'H' {
                fmt.Printf("invalid input")
            }
        }
    }
}
  • 写回答

2条回答 默认 最新

  • douliang1900 2016-08-01 07:15
    关注

    You need to edit the inner loop to check for every input line,
    and find the number then comma and so, like this working sample code:

    package main
    
    import (
        "bufio"
        "fmt"
        "log"
        "os"
        "strconv"
        "strings"
    )
    
    func readLines(path string) ([]string, error) {
        file, err := os.Open(path)
        if err != nil {
            return nil, err
        }
        defer file.Close()
        var lines []string
        scanner := bufio.NewScanner(file)
        for scanner.Scan() {
            lines = append(lines, scanner.Text())
        }
        return lines, scanner.Err()
    }
    func checkOne(letter byte, number, i, j int) {
        if letter > 'H' {
            fmt.Printf("invalid input %q @ (%d, %d) 
    ", letter, i, j)
        }
        if number > 8 {
            fmt.Printf("invalid input number %d @ (%d, %d) 
    ", number, i, j+1)
    
        }
    }
    func main() {
        lines, err := readLines("chessin.txt")
        if err != nil {
            log.Fatalf("readLines: %s", err)
        }
        var numLines int = len(lines)
        for i := 0; i < numLines; i++ {
            line := lines[i]
            j := 0
            comma := strings.IndexByte(line, ',')
            if comma == -1 {
                log.Fatalf("comma not found at line: %d", i)
            }
            number, err := strconv.Atoi(line[j+1 : comma])
            if err != nil {
                log.Fatalf("line:%d err: %s", i, err)
            }
            checkOne(line[j], number, i, j)
    
            j = comma + 1
            number, err = strconv.Atoi(line[j+1:])
            if err != nil {
                log.Fatalf("line:%d err: %s", i, err)
            }
            checkOne(line[j], number, i, j)
        }
    }
    

    input file "chessin.txt":

    I9,A2
    A10,C3
    D2,L3
    

    output:

    invalid input 'I' @ (0, 0) 
    invalid input number 9 @ (0, 1) 
    invalid input number 10 @ (1, 1) 
    invalid input 'L' @ (2, 3) 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划