Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.22;
Скачать: CL | DM;

Вниз

Можно ли объявить строковую константу длиной более 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-69881
UDS
2002-04-07 20:38
2002.04.22
Можно ли просто отцентрировать текст в EDIT?


1-69765
SJ_Hunter
2002-04-10 00:02
2002.04.22
Euqation и рисование


1-69878
Yuri Btr
2002-04-09 10:25
2002.04.22
Глюк в TMemo ???


4-70076
Ewgenij
2002-02-18 00:15
2002.04.22
Как обработать появление окна при его создании?


1-69873
ymin
2002-04-09 11:21
2002.04.22
Как проще всего распечатать StringGrid? Кстати она помещается на.