|
|
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Мужики, понадобилось читать и писать вывод запускаемой внешней программы (примерно как в этом примере ) в наследник TStrings построчно , а не прочтенными блоками. Причем чтение должно осуществляться из пополняемого в это время контейнера/памяти (а не как в выше приведенном примере, после окончания отработки внешней программы). Подскажите, плз, в каком направлении двигаться? Может ссылки на материал, который можно почитать? ================= Док. Win7 Ultim x64/Deb 10 (MATE; gtk3) amd64: FB 3.0.4.33054, Lazarus 2.1(r.61313); FPC 3.3.1 (r.42151), IBX by -Rik- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 17:32 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Док, Так в примере же есть поблочное чтение. Остаётся только найти окончание строки и скопировать её. Если читаешь на виндах, то вывод необходимо сначала перекодировать OemToAnsi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 17:46 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyТак в примере же есть поблочное чтение. в примере все телодвижения начинаются лишь после того, как запись в память закончена, а мне бы понять, как из постоянно пополняемого MemoryStream читать и парсить строки. Пока не догоняю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 18:38 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Док, Вот там чтение блока: Код: pascal 1. Блок прочитал, ищи конец строки. Не нашёл, складывай данные в накопительный буффер. Нашёл - клади часть данных до маркера новой строки в накопительный буффер и конвертируй накопительный буффер в строку. Накопительный буффер сделай строковым: Код: pascal 1. 2. 3. 4. Потом строку получишь приведением типа: string(accBuf); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 18:50 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Моя процедура выделения строки. Для дельфей. Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 18:57 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, спасибо, смотрю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2019, 20:36 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Memory Mapped File Вроде как даже рекомендованный способ совместного доступа к одному файлу. Или он базируется на нем. В свое время накатал исходник по расширению менеджера памяти для датасета. Собирался к лазарю прикрутить... Но вот времени не было сделать, а теперь уже бывший дельфиец... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2019, 16:42 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Есть же TStringReader ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 10:14 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
stanilarрасширению менеджера памяти для датасетане поясните о чем речь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 10:36 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Док, обычно автомат делают несмотря на всю теорию, на практике в простейших случаях как этот, это обычно набор Case в которых происходит установка текущего состояния у вас ещё и под разные платформы, так что стоит сразу заложиться на все возможные разделители #13, #10, #10#13 если номер строчки неважен, то можно считать любой из символов #13 или #10 разделителем и если аддитивный буфер непустой считать его новой строкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 11:08 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)у вас ещё и под разные платформы, так что стоит сразу заложиться на все возможные разделители #13, #10, #10#13 sLineBreak же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 11:34 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Vizit0r, даже мелкомягкие иногда просто #13 или #10 скидывают, и такие сбои нужно обрабатывать корректно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 11:40 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)стоит сразу заложиться на все возможные разделители #13, #10, #10#13 В моём варианте, как раз, поддерживается #10, #13, #13#10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 11:51 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, спасибо за пинок в нужном направлении. Правда, для простоты я реализовал через строки, а не через указатели (скорость выполнения дял меня не критична, в моих задачах не планируется длинный вывод). Выглядит примерно так (пояснения в тексте для себя-склеротика и нубов, которые будут читать код после меня. "Лишние" переменные остались после отладки, в итоговом коде почищу) Код: pascal 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. Возможно, есть ошибки в коде. Если найду, поправлю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 12:07 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Док, Хапнешь горя, когда дефотные строки перестанут быть байтовыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 12:54 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
кстати, не помешает наверное ещё и по таймауту забирать то, что ещё не завершено #10, #13, #13#10. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 13:05 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyХапнешь горя, когда дефолтные строки перестанут быть байтовыми. можно подробнее, о каких строках речь и какими они станут? НЕ ОДНОбайтовыми, ты имеешь ввиду? Мимопроходящийкстати, не помешает наверное ещё и по таймауту забирать то, что ещё не завершено #10, #13, #13#10 не совсем догнал - где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 14:25 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Докможно подробнее, о каких строках речь и какими они станут? НЕ ОДНОбайтовыми, ты имеешь ввиду? О дефолтном String, он будет юникодовым в ближайшей перспективе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 15:09 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
04.09.2019 15:09, Kazantsev Alexey пишет: > О дефолтном String, он будет юникодовым в ближайшей перспективе. в Лазаре utf8. а Док на нём и сидит. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 15:40 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
04.09.2019 14:25, Док пишет: МП>> кстати, не помешает наверное ещё и по таймауту забирать то, что ещё не завершено #10, #13, #13#10 > не совсем догнал - где? если я правильно понял твою задачу, ты тащишь данные, которые процесс вываливает в консоль по "трубе". может так случиться, что ты получил из "трубы" последовательность, которая не заканчивается #10, #13, #13#10 а процесс, который ты отслеживаешь, ничего больше не шлёт (пока). в этом случае ты этого кусочка можешь ждать ооооооочень долго... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 15:45 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, Строковый тип определяется не лазарем, а в фпц он скоро будет юникодовым по дефолту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 15:49 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Кстати, уже и лазарь готовится к utf-16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 15:58 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
The goal of FPC project is [/b]to create a Delphi compatible UnicodeString (UTF-16) based solution[/b], but it is not ready yet. It may take some time to be ready. This UTF-8 solution of LCL in its current form can be considered temporary. In the future, when FPC supports UnicodeString fully in RTL and FCL, Lazarus project will provide a solution for LCL that uses it. At the same time the goal is to preserve UTF-8 support although it may require changes to string types or something. Nobody know the details yet. We will tell when we know... In essence LCL will probably have 2 versions, one for UTF-8 and one for UTF-16. Так что, использование конкретизированного строкового типа не просто доброе пожелание, это маст хэв. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 16:02 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
дважды дибилы! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 16:08 |
|
||
|
Lazarus: построчное чтение данных из памяти
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийможет так случиться, что ты получил из "трубы" последовательность, которая не заканчивается #10, #13, #13#10 так я в коде вроде бы учел этот момент. Нет? Код: pascal 1. 2. 3. 4. 5. 6. 7. Не уверен, но repeat..until в операторные скобки заключать же не надо? зы. вообще, я пишу для себя кроссплатформенную утилитку с использованием gbak/gfix/gstat/isql - покатаю код еще там... Kazantsev AlexeyТак что, использование конкретизированного строкового типа не просто доброе пожелание, это маст хэв. если я правильно тебя понял, все упирается в то, какого типа строка в фпц на момент сборки кода. Ну дык я же везде повтыкал UTF8-аналоги функций работы со строками, которые корректно работают как с UTF8, так и с ansi. Наверняка, в момент перехода на utf16 окончательно обновятся и аналогичные UTF16-функции, которые (весьма вероятно) будут корректно работать со всеми ansi/utf8/utf16 строками. Вся беда в том, что автор...Nobody know the details yet. We will tell when we know... Или я не так тебя понял и опять чего-то не догоняю? ps. надеюсь #13 и #10 при любой погоде остануться однобайтными . Иначе придется, как в Дельфях, из CodePointSize/UTF8CodepointSize городить огород. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2019, 16:34 |
|
||
|
|

start [/forum/topic.php?fid=58&startmsg=39856405&tid=2039056]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 470ms |

| 0 / 0 |
