Untitled
unknown
golang
a year ago
1.9 kB
5
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