Untitled
unknown
golang
a year ago
1.9 kB
9
Indexable
package main
import (
"bufio"
"bytes"
"fmt"
"os/exec"
"runtime"
"strings"
"unicode"
"unicode/utf8"
)
func fromClipboard() ([]byte, error) {
var cmd *exec.Cmd
var outb bytes.Buffer
switch runtime.GOOS {
case "linux":
cmd = exec.Command("xclip", "-selection", "clipboard", "-o")
default:
cmd = exec.Command("Get-Clipboard")
}
cmd.Stdout = &outb
err := cmd.Run()
if err != nil {
return nil, err
}
return outb.Bytes(), nil
}
func toClipboard(output []byte) error {
var err error
switch runtime.GOOS {
case "linux":
mycmd := fmt.Sprintf("echo %s | xclip -selection clipboard", string(output))
err = exec.Command("bash", "-c", mycmd).Run()
default:
o := fmt.Sprintf("\"%s\"", string(output))
err = exec.Command("Set-Clipboard", "-Value", o).Run()
}
return err
}
func main() {
// input es lo importante. En un futuro se puede cambiar para que sea
// el texto sanitizado de un comentario
input, err := fromClipboard()
if err != nil {
panic(err)
}
// el output es la salida, con el formato de excel. cada coma representa una nueva celda.
var output []byte
lineScanner := bufio.NewScanner(strings.NewReader(string(input)))
for lineScanner.Scan() {
byteScanner := bufio.NewScanner(strings.NewReader(lineScanner.Text()))
byteScanner.Split(bufio.ScanRunes)
prediction := false // flag que controla si la linea es una prediccion o está vacía
for byteScanner.Scan() {
rune, _ := utf8.DecodeRune(byteScanner.Bytes())
if unicode.IsDigit(rune) {
prediction = true
// añade un número a la lista
output = append(output, byteScanner.Bytes()...)
output = append(output, byte(','))
}
}
if prediction {
// añadir tres tabulaciones más para separar predicciones
for i := 0; i < 3; i++ {
output = append(output, byte(','))
}
}
}
err = toClipboard(output)
if err != nil {
panic(err)
}
fmt.Printf("Listo, facha.")
}Editor is loading...
Leave a Comment