Anonymous
Не совсем понял
ros
если однократная операция по чему бы и нет
Anonymous
В любом случае спасибо… оставлю как вариант
ros
это же разовая операция
или файлы периодичемки прибывают откуда-то?
ros
можно прочитать файл и взять байты из буфера пропустив первые 45
потом переконвертить кодировку и анмаршалить
ros
тогда то что дал вполне достаточно
и не надо костылять на go
Anonymous
Anonymous
спасибо еще раз
ros
vlad@vlad-pc-home:/tmp$ ls -l *.xml
-rw-r--r-- 1 vlad vlad 137 сен 3 12:47 sdsadw.xml
-rw-r--r-- 1 vlad vlad 136 сен 3 12:47 sdsad.xml
vlad@vlad-pc-home:/tmp$ for OUTPUT in $(ls *.xml); do cat $OUTPUT | sed '0,/encoding="windows-1251"/s/encoding="windows-1251"/encoding="utf-8"/' | iconv -f cp1251 -t utf8 -o $OUTPUT.utf8.xml; done
vlad@vlad-pc-home:/tmp$ ls -l *.xml
-rw-r--r-- 1 vlad vlad 137 сен 3 12:47 sdsadw.xml
-rw-r--r-- 1 vlad vlad 130 сен 3 13:12 sdsadw.xml.utf8.xml
-rw-r--r-- 1 vlad vlad 136 сен 3 12:47 sdsad.xml
-rw-r--r-- 1 vlad vlad 129 сен 3 13:12 sdsad.xml.utf8.xml
Anonymous
Anonymous
И еще один, Go умеет «внутри себя» bash скрипты выполнять, или необходимо создавать прям файл script.sh?
Daniel
что такое "внутри себя"?
Daniel
Anonymous
Anonymous
Daniel
Daniel
правильно это делается так: новый файл, потом mv на место старого
Anonymous
Nikolay
Michael
пакетик lua
Michael
ору
Nikolay
Michael
Anonymous
В документации экземп
package main
import (
"log"
"os/exec"
)
func main() {
cmd := exec.Command("sleep", "1")
log.Printf("Running command and waiting for it to finish...")
err := cmd.Run()
log.Printf("Command finished with error: %v", err)
}
Но может ли он комбинировать команды
Daniel
этот - нет
Anonymous
На просторах стековерфлоу нашел
package main
import (
"os"
"os/exec"
"fmt"
"strings"
"path/filepath"
)
var (
output_path = filepath.Join("./output")
bash_script = filepath.Join( "_script.sh" )
)
func checkError( e error){
if e != nil {
panic(e)
}
}
func exe_cmd(cmds []string) {
os.RemoveAll(output_path)
err := os.MkdirAll( output_path, os.ModePerm|os.ModeDir )
checkError(err)
file, err := os.Create( filepath.Join(output_path, bash_script))
checkError(err)
defer file.Close()
file.WriteString("#!/bin/sh\n")
file.WriteString( strings.Join(cmds, "\n"))
err = os.Chdir(output_path)
checkError(err)
out, err := exec.Command("sh", bash_script).Output()
checkError(err)
fmt.Println(string(out))
}
func main() {
commands := []string{
"echo newline >> foo.o",
"echo newline >> f1.o",
"echo newline >> f2.o",
}
exe_cmd(commands)
}
Daniel
ну - типа того
Anonymous
В общем может)
ros
накой ляд это тянуть в Go?
поупражняться в костылестроительстве так хочется чтоль?
Anonymous
Daniel
думаю - этого делать не надо вообще
ros
руками запустить и забыть
Anonymous
У нас веселые ребята в Терфонде сидят, пишут на сисярп и очень любят cp1251 пихают его везде где только можно
Anonymous
И всей области отчеты шлют в этой кодировке
Anonymous
Anonymous
У кого есть Го на практике книга на русском поделитесь если не жалко
Roman
Если есть нормальный перевод, было бы круто
Мерль
Anonymous
Aslan
Anton
У нас тоже были любители и в win1251 слать, и в iso
Anonymous
Anonymous
Vasily
а потом остальное дочитать
Vasily
и быстро будет
Anonymous
К сожалению я не знаю как это сделать 🙁
Vasily
>> byteValue, _ := ioutil.ReadAll(xmlFile)
>> var zl_list models.ZL_LIST
вот тут ты всё вычитывашь
перед этим надо вычитать кусок, байтов 100, может 200
и в нём заменить
есть тебе только это мешает
Vasily
можно даже руками найти по байтовой позиции и заменить там, уже в вчитанном файле
Anonymous
Anonymous
я имею введу, как это в коде выглядит.
Vasily
дай 1 строчку фалй
Vasily
xml
Vasily
byteValue[x:y] = []byte(`utf8" `)
ты просто заменяешь кодировку вместе с полесдней кавычкой на то что надо тебе - в данном случае utf8 и пробелы чтобы слайс не пересоздавать
по коду неправильно :) там подругому как-т опишется, н оя спал 2 часа и не соображаю
там ты берёшь слайс, который ссылается на ту же область памяти и меняешь его
Anonymous
дай 1 строчку фалй
<?xml version="1.0" encoding="windows-1251"?>
Vasily
https://s.mail.ru/N5EU/FMXjDbcEv
Vasily
вот типа так :)
Vasily
это если упарываться по памяти
Vasily
copy
Vasily
тебе нужен copy
Anonymous
тебе нужен copy
Мужик, ты слишком крут, я вообще хз как это сделать)
Vasily
a := byteValue[31, 44]
copy(a, []byte(`utf8" `))
Vasily
вот так типа
Vasily
это если тебе надо в 1 месте поменять кусок :)
Anonymous
Можно тебе в ЛС завтра вопросами подставить пожалуйста?
Anonymous
Vasily
сюда пиши лучше, будет время - отвечу
Vasily
или кто быстрей меня что дельнео скажет
Anonymous
ок
Vasily
copy(byteValue[31, 44], []byte(`utf8" `))
может вот так даже пройдёт
Vasily
сделай потом println( string( byteValue[:100] ) для просмотра результата
Anonymous
ок