Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
ВнизМожно ли объявить строковую константу длиной более 255 байт? Найти похожие ветки
← →
lipskiy (2002-04-09 17:42) [0]Почему при описании константы приходится плюсовать куски строк, а нельзя в одной паре кавычек задать сразу всю строку, если она длиннее 255 байт? Может можно все таки как-то описать длинную строку без плюсов?
← →
Андрей Сенченко (2002-04-09 17:45) [1]Может быть pchar ?
← →
lipskiy (2002-04-09 17:48) [2]А как, пардон за невежество, описывается константа PChar?
← →
PVOzerski (2002-04-09 18:10) [3]Дело тут, IMHO, не в том, что выбрать: Pchar или String
(
>А как, пардон за невежество, описывается константа PChar?
const s:pchar="XXXXXX";
)
Вы все равно присваиваете в блоке описаний Вашей типизированной константе
некую неименованную строковую, а здесь ограничения остаются в силе. Адекватное
решение:
const x:array[1..size]of char=("a","b","c",
← →
Андрей Сенченко (2002-04-09 18:18) [4]>>PVOzerski © (09.04.02 18:10)
>> , а здесь ограничения остаются в силе
>> const x:array[1..size]of char=("a","b","c",
Если честно, не понял ... нам нужно в константу записать "строку длиннее 255 символов". А если это "длиннее" больше двух-трех тысяч ? что, всю строку пробивать побуквенно через запятые в кавычках ?
← →
Андрей Сенченко (2002-04-09 18:22) [5]Насчет ограничений - да действительно .. ошибка при компиляции.
...
Еще вариант, правда костыльного характера : в константы поместить например имя файла, из которого это будет читаться
← →
PVOzerski (2002-04-09 18:32) [6]>Если честно, не понял ... нам нужно в константу записать "строку длиннее 255 символов". А
> если это "длиннее" больше двух-трех тысяч ? что, всю строку пробивать побуквенно через
> запятые в кавычках ?
Бывало и больше 2-3 тысяч. Но зачем же вручную? Пишется маленькая программка, которая
Вашу константу считывает из файла, приводит к соответствующему синтаксису и пишет в текстовой
файл. Потом Вы этот кусок вставляете в свою программу, и всё. И это не шутка: алгоритм
тривиальнейший, усилий требует куда меньше, чем тупое вбивание кавычек с запятыми.
← →
Андрей Сенченко (2002-04-09 18:40) [7]А смысл ? Такое может понадобиться только в случае, если объявление подобных констант происходит не реже раза в неделю
Ну ладно. Это уже из области "спор в пользу нищих". Я думаю, автор сам решит - нужен ли ему подобный подход.
← →
lipskiy (2002-04-09 19:52) [8]Я как раз думал о варианте с программкой, предложенном PVOzerski.
Единственное что, в этом случае удобнее описывать обычный string и разбивать его на куски по 255 и ставить плюсы. Уже было собрался писать утилитку - да че-то в лом стало, вот и задал сей вопрос - типа может проще можно.
> А смысл ? Такое может понадобиться только в случае, если
> объявление подобных констант происходит не реже раза в неделю
Дело тут не только в частоте, но еще и в количестве таких констант в текущем проекте. Вот мне, например, потребовалось сейчас описать десяток констант - страничек текста в формате HTML, и я не хочу выделять их в отдельные файлы или париться с ресурсами ради этого, строковые константы - проще, быстрее и удобнее и для создания и для редактирования. Тем более, что мои странички в процессе писания кода будут неоднократно корректироваться.
Вот ведь, в который раз убеждаюсь, что способы решения неких проблем лучше тех, что самому приходят на ум (вообще по жизни, даже не только в программинге) не так уж часто и встречаются... С одной стороны - грудь вперед, типа не глупее других, а с другой стороны - разочарование, что это, оказывается, и есть лучший вариант...
Окей, спасибо всем.
← →
Вася Пупкин (2002-04-10 05:04) [9]>описать десяток констант - страничек текста в формате HTML..
Имхо, "парится с ресурсами" будет намного проще :)
Создаешь текстовый файл типа rc (например, MyRes.rc):
PAGE1 HTML DISCARDABLE "PAGE1.HTML"
PAGE2 HTML DISCARDABLE "MYPAGE.HTML"
и т.д. и т.п.
Потом компилишь его: brcc32 myres - получишь myres.res
В проге (пример):
{$R *.DFM}
{$R MYRES.RES}
procedure TForm1.Button1Click(Sender: TObject);
var
H:HRSRC;
hResData:HGLOBAL;
PRes:Pointer;
Size:dword;
begin
h:=FindResource(HInstance,"PAGE1","HTML");
//if h=0 then temp:=GetLastError...; если не найден
//
// h:=FindResource(HInstance,"PAGE2","HTML");
hResData:=LoadResource(HInstance,H);
PRes:= LockResource( hResData);
Size:=SizeofResource(HInstance,hResData);
....
end;
Здесь имеешь : PRes - Pointer на первый байт ресурса (твоей html-странички); Size - размер ресурса (странички) в байтах
? А что еще надо для полного счастья ?? :))
← →
Anatoly Podgoretsky (2002-04-10 08:32) [10]Неужели так кавычки и плюс мешают?
А так нельзя, существует ограничение не длину, в разных версия рахное, но есть.
← →
drpass (2002-04-10 10:40) [11]Длинную строку нельзя описать без плюсов не потому, что существует какое-то ограничение на длину констант, а потому, что компилятор читает только первые 250 символов в строке текста. Если строка вылезает за границу, она, естественно, не обрабатывается. Вложи константу в несколько строк и соедини их плюсами - и все в порядке.
← →
lipskiy (2002-04-10 13:14) [12]
> Неужели так кавычки и плюс мешают?
Лень, господа, лень...
Без лени нет прогресса :)
2 Вася Пупкин
Спасибо, поробую так, м.б. и правда удобнее...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c