@gogolang

Страница 142 из 1630
Ivan
23.02.2017
11:08:13
Я не понимаю, как мне понять что s:2:"яя" на самом деле s:4:"яя"

Stanislav
23.02.2017
11:12:04
ну, на самом деле внутри пхп оно идентично

Евгений
23.02.2017
11:12:07
а что говорит спека php serialize? что там должна быть длина указана в байтах или в символах в кодировке utf8?

Stanislav
23.02.2017
11:12:14
s - string, 2 - 2 символа

Google
Евгений
23.02.2017
11:12:32
тогда можно рками идти по строке по рунам

и проверять: _

Ivan
23.02.2017
11:12:51
Дак, парни какая мне разница что спека говоит, у меня вот база на руках где число - число символов, а в либе единственной что смог найти это число байт.

Евгений
23.02.2017
11:13:07
- мы на наступлии на двойную кавычку " - следующий символ после конца найше строки - она

Ivan
23.02.2017
11:13:10
я думаю просто идти по рунам и ждать кавычку, так?

Евгений
23.02.2017
11:13:17
да

и проверить что ее не было в середине

Ivan
23.02.2017
11:13:37
\" валидная строка

"\""

Евгений
23.02.2017
11:13:48
я бы падал в обеих ситуациях - т.к. гарантированно получишь хлам

кстати, да - еще эскейп надо отработать!

Ivan
23.02.2017
11:14:12
Полное дерьмо

ТАк, смотрите, я точно знаю, что у меня кирилица и латиница, без корейских алфавитов, т.е. в наихудшем случае два байта

Google
Ivan
23.02.2017
11:15:07
хотя. никак не помогает же это.

s:21:"This is \"Спарта!\""

Евгений
23.02.2017
11:15:35
без разницы

они могут быть смешаны

лучше обрабатывать общий случай

Ivan
23.02.2017
11:16:11
ну получается что число в s:21 мне совсем бесполезно чтоль.

Евгений
23.02.2017
11:16:16
golang-овская utf8 либа нормально отрабатывает все эти случаи с длиной

полезно для проверки

Ivan
23.02.2017
11:16:28
тут вся идея то я так понимаю, не искать кавычку, а сразу знать сколько символов

s:15:"Низкое качество"

Евгений
23.02.2017
11:16:45
что строка не оборваалсь раньше, и закончилась в нужном месте

если идешь по рунам, то ты их проверяшь на кавычку

Ivan
23.02.2017
11:17:29
func (r *Reader) Read(b []byte) (n int, err error) тут вот про байты, а есть такой же про руны ;)

i:=21; for v,r=range str { ... i--} так идти?

Евгений
23.02.2017
11:19:55
грубо говря так

https://play.golang.org/p/yRUZVuHaFR

const nihongo = "日本語 \"Вася" for index, runeValue := range nihongo { fmt.Printf("%#U starts at byte position %d", runeValue, index) if runeValue == '"' { fmt.Printf(" <-- Achtung! Кавычка ") } fmt.Printf("\n") }

в доке более подробно

https://blog.golang.org/strings

Ivan
23.02.2017
11:20:59
да, спасибо это я понял. Тут конечно попандос с экранированием

Google
Евгений
23.02.2017
11:21:16
да

Ivan
23.02.2017
11:21:35
хотя, я ж могу опираться на число символов

Евгений
23.02.2017
11:21:41
ну это можно решить флагом

Ivan
23.02.2017
11:21:48
прочитать по рунам все 21, убедится что последняя кавычка

Евгений
23.02.2017
11:22:04
не последняя - та, что за ней

видишь \ - ставишь флаг escape на следующем символе сбрасываешь

и перед выходом проверяешь, что флаг сброшен - иначе строка битая

Ivan
23.02.2017
11:22:41
ну да, так. Спасибо друг. Не думаю что мне особенно поможет. уверен оно щас отовсюду в либе полезет, но хоть шаг вперед

Евгений
23.02.2017
11:23:02
более чем уверен, что полезет :)

очень рекомендую написать ряд тестов, чтобы все эти сложные случаи обработать

Ivan
23.02.2017
11:23:37
а что делать то. три поля, полторамиллиона записей таких, надо перелопатить

Евгений
23.02.2017
11:23:42
вначале очевидные, что обсудили, а затем - на основе тех, данных что есть

Ivan
23.02.2017
11:23:52
я уж дамю в самом деле что ли считать их в php и переписать в json

Евгений
23.02.2017
11:24:01
тоже вариант

Ivan
23.02.2017
11:24:06
потратить день на это, чем патчить либу 2013 года

Евгений
23.02.2017
11:24:28
может даже быстрее будет

конвертор очень простой - читаешь самим пыхом эти сериалзованные данные и родной же либой пишешь в json

опять - если пых не смог прочесть - логировать такую строку, потом разгребать руками

Ivan
23.02.2017
11:26:26
Щас все таки запатчу, вдруг не вылезет. бываю же удачи

аа, дак понятно, мне ж не почему ранжем то идти . строка то не прочитана

Google
Ivan
23.02.2017
11:31:36
ладно, прочитаем с запасом вперед

Евгений
23.02.2017
11:37:11
если нужно читать с произвольного места 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

Ivan
23.02.2017
11:38:06
Евгений я понял про что вы, просто в ваших примерах уже const nihongo в начале, что вам и позваляет его читать, а у меня потоковый реадер типа

И опираясь на прочитанное число я и пытаюсь предсказать сколько буфера то прочитать вперед

Евгений
23.02.2017
11:39:21
а целиком нельзя загрузить в память? или они огромные?

Ivan
23.02.2017
11:40:22
Да можно наверное, но либа вся (не моя) на то расчитана что читаем

Евгений
23.02.2017
11:40:24
имхо это упростит дело, если читать мелкими буферами, то нужно будет обрабатывать продление каждого символа - т.к. часть будет обрываться и продолжатьс дальше

Ivan
23.02.2017
11:40:39
я пока придумал так, я вижу число s:15 и сразу читаю себе 30 байтов вперед на случай кирилицы

а затем отсчитываю там 15 рун

Запатчил s:15:"Низкое качество" == Низкое качество" заработало

Олег
23.02.2017
11:41:51
Я, честно говоря, не особо в теме, но может быть, для потокового чтения рун вот это поможет: https://golang.org/pkg/bufio/#Reader.ReadRune

Евгений
23.02.2017
11:41:58
либо читать 1 байт и смотреть сколько еще из него надо дочитать utf8.RuneLen('界')

Ivan
23.02.2017
11:41:59
Правда, другие тесты в этой либе упали, хаха

Спасибо Олег!

Не знаю поможет ли но этот мой патч кеоторый двойной буфер читает, явно убивает либу

Да, конечно убивает, нашел место, оно как бы перематывает позицию реадера этого моего strings.Reader ,и потом там всё наперекос

Похоже func (*Reader) ReadRune моё спасение

Anton
23.02.2017
11:52:33
А не проще php скриптом в нормальный вид преобразовать?

Уже бы решилось

Google
Ivan
23.02.2017
11:53:15
Ну есть да такой вариант, согласен, но выбор то или go ковырять или php. Пока первое выбрал

ну вобщем отчаялся, все кто сразу говорил идти в php были правы.

Оппа. тока написал отчаялся, и тут же ошибку нашел, и тесты прошли.

Вы когда даже молчите и то помогаете

23.02.2017
12:39:15
Я и не такое могу

Ivan
23.02.2017
12:39:37
прогнал тесты супротив базы, почти всегда работает

не жизнь а сказка просто

Eugene
23.02.2017
13:03:05
кто может пояснить, зачем нужны указатели?

Олег
23.02.2017
13:03:41
уу жесть

вот так приплыли)

Eugene
23.02.2017
13:06:11
я вижу, что они нужны для изменения значения переменных определенных в других функциях

Олег
23.02.2017
13:06:42
это наверное самая тупая для понимания тема в вузе моем была)

я сам допер только спустя какое то время)

Eugene
23.02.2017
13:07:23
а из пояснений в учебниках по go, понимаю, что с их помощью эмулируется ООП

Олег
23.02.2017
13:07:46
мда)

Для большего понимания лучше с++ зайти)

Eugene
23.02.2017
13:08:54
где по человечески объясняется?

Олег
23.02.2017
13:09:30
Eugene
23.02.2017
13:09:54
можно ими пользоваться и без разъяснений конечно, но хочется "концептуально" понять

Страница 142 из 1630