Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Вниз
Отделение текста от бинарника Найти похожие ветки
← →
ZGadget (2007-12-04 01:38) [0]Пишу HTTP клиент. Есть буффер в который загружаются данные с веб-сервера. Структура данных примерно такая:
текст_текст_текст_текс
...
[строка_разделитель (тоже текстовая)]
[двоичные данные]
...
[двоичные данные] - например картинка.
Пытаюсь отделить всё что идёт до [строка_разделитель] от того что идёт после неё. Весь день бился, ничего не помогает...
Вот, для наглядности, как у меня всё устроено:
Buffer:Pointer;
...
GetMem(Buffer,10240);
Нужто как-то отрезать часть, которая идёт до [строка_разделитель] вместе со строкой разделителем и записать обратно в буффер.
← →
Германн © (2007-12-04 02:03) [1]
> Вот, для наглядности, как у меня всё устроено:
> Buffer:Pointer;
> ...
> GetMem(Buffer,10240);
>
И где тут "наглядность"?
← →
KilkennyCat © (2007-12-04 03:24) [2]copy, pos
← →
ZGadget (2007-12-04 11:09) [3]
> Германн
помоему этого должно хватить чтобы понять задачу.
> KilkennyCat
ммм для работы с pos и copy потребуется преобразование типа PChar(Buffer) и тогда потеряются двоичные данные... или я чего-то не понимаю?
← →
Reindeer Moss Eater © (2007-12-04 11:25) [4]текстовые данные идут впереди, позицию разделителя найти значит можно.
в том числе через Pos
← →
Anatoly Podgoretsky © (2007-12-04 11:26) [5]> ZGadget (04.12.2007 11:09:03) [3]
Что то я не видел необходимости преобразования в PChar, не путаешь с Str... функциями?
Зато этим функциям требуется преобразование в string
Тут нужна функция Move или использовать в качестве буфера string, тогда их можно будет использовать и освобождать буфер не потребуеся.
← →
Anatoly Podgoretsky © (2007-12-04 11:36) [6]> Reindeer Moss Eater (04.12.2007 11:25:04) [4]
Ты уверен, что нет обращения к структуре строки?
Например к длине?
Я не стал бы рисковать, даже если в текущем генофонде этого и нет.
← →
Reindeer Moss Eater © (2007-12-04 11:42) [7]Я бы привел буфер к PChar и нашел бы разделитель.
Если конечно это не стандартный ответ http сервера где есть content-length и сздади присутствует двоичка.
Там такого изврата конечно же не потребуется.
← →
Reindeer Moss Eater © (2007-12-04 11:45) [8]То есть просто в цикле делаем readln пока не прочитаем пустую строку.
Затем смотрим, есть ли там content-length и читаем уже двоичный буфер.
Все как учили в автошколе.
← →
ZGadget (2007-12-04 12:57) [9]Ответ HTTP сервера не стандартный.
Найти позицию разделителя не составляет труда, тут действительно можно сначала привести тип к PChar, а вот как потом произвести отделение в буффере?
← →
ZGadget (2007-12-04 13:25) [10]Посоветовали просто указатель переместить на конец стоки-разделителя. Как это делается? например Buffer:=Buffer+100?
← →
Reindeer Moss Eater © (2007-12-04 13:49) [11]Все читать в двоичный буфер.
Отделить заголовок через PChar
+ Отдельная переменная-указатель PByte нацеленная на байт после заголовка.
Исходный указатель сохранять для освобождения всего буфера.
← →
Anatoly Podgoretsky © (2007-12-04 13:51) [12]Buffer надо приводить к Integer, прибавлять и потом обратно.
Не потеряй буфер.
10240 это такая маленькая величина, что проще буфер выделить статически как array [0..10239] of char и работать c PChar, тогда к нему можно прибавлять 100 и не надо заботиться об выделение и освобождение. Все плюсы статики.
← →
Reindeer Moss Eater © (2007-12-04 13:55) [13]Именно к интегеру вовсе не обязательно.
Сойдет любой типизированный указатель. Хотя это конечно зависит от характера данных в самом буфере.
← →
ZGadget (2007-12-04 14:55) [14]Вот идея с Buffer:array [0..10239] of char; мне очень нравится. Сейчас туда-сюда вертел, никак не соображу как к нему смещение прибавить, чтобы отрезать всё что до разделителя...
Когда был Pointer, то я делал так Inc(Integer(Buffer),offset); но там сплошные проблемы с этой памятью... постоянно из-за чего-нибудь вылетает.
← →
Reindeer Moss Eater © (2007-12-04 15:04) [15]Статический массив + указатель это конечно круто.
А попроще и менее извращенно не пробовал?
PByte + GetMem например?
← →
ZGadget (2007-12-04 15:09) [16]Пока решил остановиться на array [0..10239] of char... что дальше пока не прохаваю....
← →
Reindeer Moss Eater © (2007-12-04 15:15) [17]Ну и зачем тебе указатель к массиву, доступ к элементам которого возможен по индексу, а смещение на длину текстовых данных известно?
← →
ZGadget (2007-12-04 15:22) [18]Так точно =) Туплю. Всем спасибо за советы.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c