Abrir arquivo texto e tratar por linha

387 views
Skip to first unread message

Ricardo Gomes

unread,
Feb 13, 2017, 9:50:58 PM2/13/17
to Golang Brasil
Olá pessoal,

Estou começando os primeiros passo em go e estou precisando primeiramente pegar um arquivo texto abrir ele e filtrar por linha onde cada linha está separado por "|" e vou fazer um if pra mostrar determinada linha

Exemplo:

Conteudo do arquivo texto:

|C100|1|0||55|05|1|000002397||||||||||||||||||||||
|C100|1|0||55|05|1|000002399||||||||||||||||||||||
|C100|1|0||55|05|1|000002425||||||||||||||||||||||
|C100|1|0||55|05|1|000002371||||||||||||||||||||||
|C400|2D|ECF|asdasda2330|002|
|C405|02012012|3|1036|116526|6001060,09|5693,36|
|C420|DT|151,78|||
|C420|01T1700|429,50|01||
|C420|F1|5112,08|||
|C460|2D|00|116397|02012012|25,00|0,16|0,75|||
|C470|0000008556|2,000|0|RL|25,00|060|5403|0|0,16|0,75|
|C460|2D|00|116398|02012012|27,67|0,19|0,83|||
|C470|0000015177|1,000|0|RL|5,60|060|5403|0|0,04|0,17|
|C470|0000022346|1,000|0|RL|5,60|060|5403|0|0,04|0,17|
|C470|0000025882|1,000|0|PC|6,09|060|5403|0|0,04|0,18|
|C470|0000025885|2,000|0|PC|10,38|060|5403|0|0,07|0,31|
|C460|2D|00|116399|02012012|19,90|0,13|0,60|||
|C470|0000000247|3,000|0|RLO|10,20|060|5403|0|0,07|0,31|
|C470|0000020634|1,000|0|PC|9,70|060|5403|0|0,06|0,29|
|C460|2D|00|116400|02012012|10,52|0,07|0,32|||
|C470|0000004762|1,000|0|CAT|1,12|060|5403|0|0,01|0,03|
|C470|0000008873|1,000|0|PC|1,94|060|5403|0|0,01|0,06|
|C470|0000016902|1,000|0|PC|3,68|060|5403|0|0,02|0,11|
|C470|0000023287|1,000|0|PC|1,26|060|5403|0|0,01|0,04|
|C470|0000023303|1,000|0|PC|1,26|060|5403|0|0,01|0,04|
|C470|0000023308|1,000|0|PC|1,26|060|5403|0|0,01|0,04|
|C460|2D|00|116401|02012012|5,00|0,04|0,16|||
|C470|0000009772|1,000|0|UN|1,25|000|5102|17,00|0,01|0,04|
|C470|0000009789|1,000|0|UN|1,25|000|5102|17,00|0,01|0,04|
|C470|0000009826|1,000|0|UN|1,25|000|5102|17,00|0,01|0,04|
|C470|0000009842|1,000|0|UN|1,25|000|5102|17,00|0,01|0,04|


preciso primeiro abrir o arquivo e armazenar todo conteúdo dele e depois fazer tipo um explode de cada linha colocando em um array
feito isso vou fazer um if linha[1] == "C460" e mostra o conteúdo todo dessa linha

package main

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


func main() {
conteudo,_ := ioutil.ReadFile("sped.txt")
linhas := strings.Split(string(conteudo),"|")
for _,v := range (linhas){
if v == "C460"{
fmt.Println(v) // << preciso mostra a linha toda do registro C460
}
}
fmt.Println(linhas[1])

}

Diego Nascimento

unread,
Feb 14, 2017, 3:50:43 AM2/14/17
to golang...@googlegroups.com
Olá Ricardo,

Eu estudei Go por alguns dias, mas não cheguei a trabalhar com arquivos, e nem usei a linguagem posteriormente, porém, eu tentei fazer aqui e funcionou, lembrando que eu apenas estudei o básico e não sei se essa é a melhor forma de se resolver esse problema, mas ai vai meu código.
==================================================

package main

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

func main() {
var literalLines []string

file, err := os.Open("sped.txt")

if err != nil {
panic(err.Error())
}

defer file.Close()

scanner := bufio.NewScanner(file)

// guarda cada linha em indice diferente do slice
for scanner.Scan() {
literalLines = append(literalLines, scanner.Text())
}

// busca linha
for _, line := range literalLines {
// busca linha pelo indice 1
// o indice 0 é vazio pois a linha começa com "|"

if strings.Split(line, "|")[1] == "C460" {
fmt.Println(line)
}
}

}

===============================================

Abraço e tenha um ótimo dia.

--

---
Você recebeu essa mensagem porque está inscrito no grupo "Golang Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para golang-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages