Евгений
не последняя - та, что за ней
Евгений
видишь \ - ставишь флаг escape на следующем символе сбрасываешь
Евгений
и перед выходом проверяешь, что флаг сброшен - иначе строка битая
engelbart
ну да, так. Спасибо друг. Не думаю что мне особенно поможет. уверен оно щас отовсюду в либе полезет, но хоть шаг вперед
Евгений
более чем уверен, что полезет :)
Евгений
очень рекомендую написать ряд тестов, чтобы все эти сложные случаи обработать
engelbart
а что делать то. три поля, полторамиллиона записей таких, надо перелопатить
Евгений
вначале очевидные, что обсудили, а затем - на основе тех, данных что есть
engelbart
я уж дамю в самом деле что ли считать их в php и переписать в json
Евгений
тоже вариант
engelbart
потратить день на это, чем патчить либу 2013 года
Евгений
может даже быстрее будет
Евгений
конвертор очень простой - читаешь самим пыхом эти сериалзованные данные и родной же либой пишешь в json
Евгений
опять - если пых не смог прочесть - логировать такую строку, потом разгребать руками
engelbart
Щас все таки запатчу, вдруг не вылезет. бываю же удачи
engelbart
аа, дак понятно, мне ж не почему ранжем то идти . строка то не прочитана
engelbart
ладно, прочитаем с запасом вперед
Евгений
если нужно читать с произвольного места
const nihongo = "日本語"
for i, w := 0, 0; i < len(nihongo); i += w {
runeValue, width := utf8.DecodeRuneInString(nihongo[i:])
fmt.Printf("%#U starts at byte position %d\n", runeValue, i)
w = width
}
Евгений
и снова хочу отрекламировать замечательную статью :) https://blog.golang.org/strings
engelbart
Евгений я понял про что вы, просто в ваших примерах уже const nihongo в начале, что вам и позваляет его читать, а у меня потоковый реадер типа
engelbart
И опираясь на прочитанное число я и пытаюсь предсказать сколько буфера то прочитать вперед
Евгений
а целиком нельзя загрузить в память? или они огромные?
engelbart
Да можно наверное, но либа вся (не моя) на то расчитана что читаем
Евгений
имхо это упростит дело, если читать мелкими буферами, то нужно будет обрабатывать продление каждого символа - т.к. часть будет обрываться и продолжатьс дальше
engelbart
я пока придумал так, я вижу число s:15 и сразу читаю себе 30 байтов вперед на случай кирилицы
engelbart
а затем отсчитываю там 15 рун
engelbart
Запатчил s:15:"Низкое качество" == Низкое качество" заработало
Oleg
Я, честно говоря, не особо в теме, но может быть, для потокового чтения рун вот это поможет: https://golang.org/pkg/bufio/#Reader.ReadRune
Евгений
либо читать 1 байт и смотреть сколько еще из него надо дочитать utf8.RuneLen('界')
engelbart
Правда, другие тесты в этой либе упали, хаха
engelbart
Спасибо Олег!
Oleg
engelbart
Не знаю поможет ли но этот мой патч кеоторый двойной буфер читает, явно убивает либу
engelbart
Да, конечно убивает, нашел место, оно как бы перематывает позицию реадера этого моего strings.Reader ,и потом там всё наперекос
engelbart
Похоже func (*Reader) ReadRune моё спасение
An7on
А не проще php скриптом в нормальный вид преобразовать?
An7on
Уже бы решилось
engelbart
Ну есть да такой вариант, согласен, но выбор то или go ковырять или php. Пока первое выбрал
engelbart
ну вобщем отчаялся, все кто сразу говорил идти в php были правы.
engelbart
Оппа. тока написал отчаялся, и тут же ошибку нашел, и тесты прошли.
engelbart
Вы когда даже молчите и то помогаете
Я и не такое могу
engelbart
прогнал тесты супротив базы, почти всегда работает
engelbart
не жизнь а сказка просто
Евгений
кто может пояснить, зачем нужны указатели?
Oleg
уу жесть
Oleg
вот так приплыли)
Евгений
я вижу, что они нужны для изменения значения переменных определенных в других функциях
Oleg
Oleg
это наверное самая тупая для понимания тема в вузе моем была)
Oleg
я сам допер только спустя какое то время)
Евгений
а из пояснений в учебниках по go, понимаю, что с их помощью эмулируется ООП
Oleg
мда)
Oleg
Для большего понимания лучше с++ зайти)
Евгений
где по человечески объясняется?
Oleg
Евгений
можно ими пользоваться и без разъяснений конечно, но хочется "концептуально" понять
Mike
А что сложного? Это переменная в которой хранится адрес в памяти другой переменной
Oleg
Oleg
ахаха))
Евгений
чем f(&p) лучше p=f(p) ?
Mike
Зависит от вкуса
Mike
ну и например если у тебя p — массив
Mike
то так у него изменится указатель на начало
Sergey
'
Mike
и это может что-то сломать
Oleg
чем f(&p) лучше p=f(p) ?
В первом случае p это указатель на адрес памяти в котором что-то хранится.
если ты пишешь &p то ты обращаешься к тому участку памяти, на который указывает *p.
Mike
если ты прокидывал его в другие места
Oleg
Mike
но это скорее не про го вопрос
hamper 𓅝
А если p структура в килобайт и функция десятки тысяч раз в секунду дергается?
Mike
я не объясняю, что он написал, он спросил, что лучше
Mike
hamper 𓅝
Вообще указатели иногда удобная штука, но там где можно без них — лучше без них как мне кажется.
Евгений
я понимаю, что такое указатель
Mike
ну вот там пример был
Mike
у тебя огромная переменная