Anonymous
Не совсем понял
ros
если однократная операция по чему бы и нет
Anonymous
если однократная операция по чему бы и нет
У меня получается около 160 файлов нужно будет обрезать
Anonymous
В любом случае спасибо… оставлю как вариант
ros
это же разовая операция или файлы периодичемки прибывают откуда-то?
ros
можно прочитать файл и взять байты из буфера пропустив первые 45 потом переконвертить кодировку и анмаршалить
Anonymous
это же разовая операция или файлы периодичемки прибывают откуда-то?
Я загружаю 77 архивов, в каждом по 2 xml файла, парсю по одному архиву (получается что на один архив (2xml файла) нужно будет запускать один раз…
ros
тогда то что дал вполне достаточно и не надо костылять на go
Anonymous
тогда то что дал вполне достаточно и не надо костылять на go
Ок, ок, если до завтра не решу, то так и поступлю
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
И еще один, Go умеет «внутри себя» bash скрипты выполнять, или необходимо создавать прям файл script.sh?
Daniel
что такое "внутри себя"?
Anonymous
Daniel
Daniel
Не знаю, вот и спрашиваю
ну мы же не знаем, что имеенно вам надо
Daniel
правильно это делается так: новый файл, потом mv на место старого
Nikolay
И еще один, Go умеет «внутри себя» bash скрипты выполнять, или необходимо создавать прям файл script.sh?
не уверен. а вот lua скрипты «внутри себя» умеет - может тебе подойдет. пакетик качнешь для луа и все
Michael
пакетик lua
Michael
ору
Nikolay
ору
на кого?
Michael
правильно это делается так: новый файл, потом mv на место старого
на всяк случай перед этим старый файл в *.old переименовать
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
накой ляд это тянуть в Go? поупражняться в костылестроительстве так хочется чтоль?
Думаешь более правильно будет создать sh скрипт и только запускать его из Go?
Daniel
думаю - этого делать не надо вообще
ros
руками запустить и забыть
Anonymous
руками запустить и забыть
В моем случае руками это не вариант
Anonymous
У нас веселые ребята в Терфонде сидят, пишут на сисярп и очень любят cp1251 пихают его везде где только можно
Anonymous
И всей области отчеты шлют в этой кодировке
Anonymous
И всей области отчеты шлют в этой кодировке
Зато экономят по байту на символ!
Anonymous
Зато экономят по байту на символ!
да хз, они ток сначала года на xml перешли до этого в dbf кидали
Anonymous
У кого есть Го на практике книга на русском поделитесь если не жалко
Roman
Если есть нормальный перевод, было бы круто
Мерль
У кого есть Го на практике книга на русском поделитесь если не жалко
Посмотри в документах конференции, вроде там есть
Aslan
Я смотрел там на все на English
Можешь скинуть ссылку?)
Anonymous
Можешь скинуть ссылку?)
Зайди на shared media этой группы там в доках она стоит
Anton
У нас веселые ребята в Терфонде сидят, пишут на сисярп и очень любят cp1251 пихают его везде где только можно
https://stackoverflow.com/questions/6002619/unmarshal-an-iso-8859-1-xml-input-in-go http://blog.tristanmedia.com/2014/10/using-go-to-parse-non-utf8-xml-feeds/ Не подходит?
Anton
У нас тоже были любители и в win1251 слать, и в iso
Vasily
Уже видел, не подходит мне мешается именно строка в документе
может вычитать просто начало и в нём заменить? чтобы не гонять байты туда-сюда
Vasily
а потом остальное дочитать
Vasily
и быстро будет
Anonymous
К сожалению я не знаю как это сделать 🙁
Vasily
>> byteValue, _ := ioutil.ReadAll(xmlFile) >> var zl_list models.ZL_LIST вот тут ты всё вычитывашь перед этим надо вычитать кусок, байтов 100, может 200 и в нём заменить есть тебе только это мешает
Vasily
можно даже руками найти по байтовой позиции и заменить там, уже в вчитанном файле
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
вот так типа
Anonymous
вот так типа
спс, завтра попробую
Vasily
это если тебе надо в 1 месте поменять кусок :)
Anonymous
Можно тебе в ЛС завтра вопросами подставить пожалуйста?
Vasily
сюда пиши лучше, будет время - отвечу
Vasily
или кто быстрей меня что дельнео скажет
Anonymous
ок
Vasily
copy(byteValue[31, 44], []byte(`utf8" `)) может вот так даже пройдёт
Vasily
сделай потом println( string( byteValue[:100] ) для просмотра результата
Anonymous
ок