Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Есть набор больших текстовых файлов, которые для ускорения работы я конвертирую в удобный формат: парсю отдельные строки, укладываю преобразованные значения в поля в структуры, структуры укладываю в массив, а массив записываю в бинарный файл :) Как быть с текстовыми полями: 1. Если в структуре объявить поле типа char [250], то это будет очень расточительно (не всем значениям нужна такая длина). 2. Если в структуре объявить поле std::string, то структура перестанет быть POD- объектом и работать с ней как с последовательностью битов уже будет нельзя. Как следствие отваливается возможность сохранения данных в файл. Есть какие-то симпатичное решения сохранения текстовых данных в бинарных файлах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 13:34 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
"Симпатичные" это которые можно применять не задействуя мозг?.. STFW "сериализация в файл". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 13:51 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovSTFW "сериализация в файл". Спасибо, уже читаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 14:12 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Обычно ускорение и удобство - это два взаимоисключающих свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 14:16 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
авторСериализатор — наш самый страшный враг. Без него нам не обойтись, а он все шепчет о том, что если все оставить строками, то мы получим аналог динамической типизации. «И нет смысла трепыхаться, — говорит он, — ведь на стороне клиента от нас ждут строку JSON или XML. Зачем же нам целое число, храни в классе набор строк!» Страшные вещи творят несчастные разработчики, порабощенные таинственным шепотом, повсюду в их коде строки. Те же, что сильнее духом, но не окрепшие разумом, напротив, преобразуют зазря туда-сюда данные в байты и обратно. Радостно потирает руки Сериализатор, видя, как страдает эффективность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 14:27 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 14:29 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
У сериализации есть громадные минусы: 1. Все структуры разного размера, поэтому каждую структуру надо писать/читать в/из bin-файла отдельно. Т.е. нельзя записать/считать сразу 10 000 структур из файла. 2. Структуру нельзя писать/читать в/из bin-файла как единый объект. Надо работать с каждым полем отдельно. Другими словами, такой способ не прокатит: Код: plaintext 1. 2. 3. Поэтому теряется скорость чтения bin-файла, ради которой все затевалось. Возникает другое предложение: количество значений текстовых данных ограничено, поэтому можно создать отдельный файл с "Индексом" используемых значений строк, а в структурах хранить только номер индекса. Какой контейнер выбрать, чтобы осуществлялся быстрый поиск как по ключу (при чтении bin-файла), так и по значению (при записи bin- файла)? Может я что-то неправильно понял и есть более простое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 15:25 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLСтруктуру нельзя писать/читать в/из bin-файла как единый объект. Надо работать с каждым полем отдельно. Есть 2 варианта: 1. Работать с полями переменной длины сохраняя перед полем его длину (например), или в заголовке файла. Этот вариант "долгий", но подходит для строк любой длины и экономит место; 2. Работать со строками (полями) одинаковой длины, заранее известной. Это быстрый и самый удобный вариант, за исключением избыточности. Какой выбрать в конкретном случае решает программист. Варианта "чтобы и строки разной длины и чтобы читалось сразу всё" нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 15:36 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
По выбору контейнера: думаю надо использовать РАЗНЫЕ map при записи и чтении bin- файла. В первом случае ключом будет текстовая строка, а значением- индекс (так можно будет легко найти уже добавленное в индекс значение, чтобы избежать дублирования). При записи файла все наоборот: ключом будет индекс (указанный в сохраненной структуре), а значением будет текстовая строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 15:55 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Я потихоньку из текстовых файлах создаю БД... Может в эту сторону лучше копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 15:57 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, Возможно, для твоей задачи вполне подойдет SQL)) Может, не надо заморачиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 16:00 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЯ потихоньку из текстовых файлах создаю БД... Может в эту сторону лучше копать?Я не успел) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 16:01 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLПо выбору контейнера: думаю надо использовать РАЗНЫЕ map при записи и чтении bin- файла. В первом случае ключом будет текстовая строка, а значением- индекс (так можно будет легко найти уже добавленное в индекс значение, чтобы избежать дублирования). При записи файла все наоборот: ключом будет индекс (указанный в сохраненной структуре), а значением будет текстовая строка. UPDATE: По выбору контейнера: думаю надо использовать РАЗНЫЕ map при записи и чтении bin- файла. В первом случае ключом будет текстовая строка, а значением- индекс (так можно будет легко найти уже добавленное в индекс значение, чтобы избежать дублирования). При чтении файла все наоборот: ключом будет индекс (указанный в сохраненной структуре), а значением будет текстовая строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 16:28 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLМожет в эту сторону лучше копать? Копай в сторону "а назачем я это вообще делаю?" В зависимости от ответа на этот вопрос направления копания будут разными. От перехода на потоковые алгоритмы обработки информации до создания индекса в памяти. Конвертирования текстовых файлов в двоичные между ними почти наверняка не будет, ибо толку от него мало. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 16:39 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL1. Все структуры разного размера, поэтому каждую структуру надо писать/читать в/из bin-файла отдельно. Т.е. нельзя записать/считать сразу 10 000 структур из файла. Можно Возникает другое предложение: количество значений текстовых данных ограничено, поэтому можно создать отдельный файл с "Индексом" используемых значений строк, а в структурах хранить только номер индекса. Какой контейнер выбрать, чтобы осуществлялся быстрый поиск как по ключу (при чтении bin-файла), так и по значению (при записи bin- файла)? Может я что-то неправильно понял и есть более простое решение? Развитие такой идеи возвращает тебя в далекие 80-е и 90-е когда "базы данных на файлах" были популярны. Это dBase, Paradox, e.t.c. Кажется даже длинные строки в них именно так и хранились. Короткие - хардкодились именно как поля фиксированного размера. Собственно, цитата которую ты привел о том что сериализатор - враг, требует обсуждения. Если враг - то в чём? В сложности разработки? В оверхеде? Твои идеи по поводу оптимизации сохранения бинарных данных в файлах (ОСБДФ) как я уже писал - устарели на 30 лет и тебе придётся во первых вступать в противостояние со "старичками" которые уже "плавали" в этих технологиях и "знают" что почем. А новичкам соотв. будет пофиг ибо для них не видно никакого профита кроме усложнения процесса разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2018, 19:44 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
maytonAlekseySQL1. Все структуры разного размера, поэтому каждую структуру надо писать/читать в/из bin-файла отдельно. Т.е. нельзя записать/считать сразу 10 000 структур из файла. Можно Есть, конечно, вариант создать вторую структуру без текстовых полей, в нее перенести всё нетекстовое и тогда можно сохранять массово. А текстовые поля сохранить как одну большую строку, полученную конкатенацией всех строк. Но мне этот способ кажется трудно- поддерживаемым: никто потом не вспомнит этот "финт ушами". maytonВозникает другое предложение: количество значений текстовых данных ограничено, поэтому можно создать отдельный файл с "Индексом" используемых значений строк, а в структурах хранить только номер индекса. Какой контейнер выбрать, чтобы осуществлялся быстрый поиск как по ключу (при чтении bin-файла), так и по значению (при записи bin- файла)? Может я что-то неправильно понял и есть более простое решение? Развитие такой идеи возвращает тебя в далекие 80-е и 90-е когда "базы данных на файлах" были популярны. Это dBase, Paradox, e.t.c. Кажется даже длинные строки в них именно так и хранились. Короткие - хардкодились именно как поля фиксированного размера. Например, 1с версии 7.7 хранила свои данные в dbf- файлах (продукт сдал позиции 8.х версиям примерно 10 лет назад). Строки хранились кратными 80 (например, если юзер ввел комментарий документа на 79 символов,то использовалась одна запись, а если накропал 81 символ, то тут уже было не обойтись без двух записей). В новых версиях есть строка неограниченной длины, способ её хранения зависит от СУБД... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 10:01 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
YuRockВозможно, для твоей задачи вполне подойдет SQL)) Может, не надо заморачиваться? Решил вернуться к идее использования map в качестве индекса, потому что полученная выборка из БД потребует дальнейшей конвертации в объекты С++ (и как следствие- потеря эффективности). Я ищу решение максимальное для скорости чтения данных, поэтому этот вариант не айс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 10:04 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLYuRockВозможно, для твоей задачи вполне подойдет SQL)) Может, не надо заморачиваться? Решил вернуться к идее использования map в качестве индекса, потому что полученная выборка из БД потребует дальнейшей конвертации в объекты С++ (и как следствие- потеря эффективности). Я ищу решение максимальное для скорости чтения данных, поэтому этот вариант не айс. Изобретаешь In-Memory DBMS ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2018, 12:00 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЕсть какие-то симпатичное решения сохранения текстовых данных в бинарных файлах?1) Текстовые данные планируется только читать? 2) Насколько большие файлы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 16:09 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
AmKadAlekseySQLЕсть какие-то симпатичное решения сохранения текстовых данных в бинарных файлах?1) Текстовые данные планируется только читать? 2) Насколько большие файлы? 1. Сначала 1 раз записать, потом все оставшиеся разы только читать. 2. ~60ГБ csv- файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2018, 18:02 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Я бы все хранил в SQLite. Очень просто и очень удобно. Из минусов, по сравнению с самописным форматом, только скорость линейного чтения, но это уже от задачи зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 13:06 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
А я бы вообще всё оставил в текстовых файлах и применял однопроходные алгоритмы для обработки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 13:33 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Соискатель С++Я бы все хранил в SQLite. Очень просто и очень удобно. Из минусов, по сравнению с самописным форматом, только скорость линейного чтения, но это уже от задачи зависит. Вот это меня в SQL и напрягает: можно выбирать либо построчно, либо все гаком. А мне надо кусками по 10 000 записей, чтобы оперативка не забилась от всей выборки данных. Конечно, есть и свои плюсики: быстрые отборы, сортировка, но это не моя задача. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 14:47 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА я бы вообще всё оставил в текстовых файлах и применял однопроходные алгоритмы для обработки. А у меня и так последовательное считывание строк из тексового файла. Да и дело не столько в считывании данных, сколько в их преобразовании в int, long, bool... Поэтому преобразую в BIN- формат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 14:49 |
|
||
|
Как сохранять строки в бинарных файлах?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 14:52 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39581754&tid=2018001]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 197ms |

| 0 / 0 |
