Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-69689
Solod
2002-03-13 07:31
2002.04.22
Вопрос о TQuery с параметрами.


6-69961
DimaIv
2002-02-04 21:56
2002.04.22
Возможна ли докачка в FastNet и как её сделать?


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


3-69673
AlexAlex
2002-03-28 18:08
2002.04.22
Что делать при сообщении Directory is bisy


1-69888
panoff
2002-04-09 11:53
2002.04.22
Юзер создаёт кол-во строк в MENUItem





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский