Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Общие вопросы разработки программ _ переменная типа STRING

Автор: Unkind 23.02.2010 16:28

Можно ли в переменную типа STRING ввести маркер конца строки?может ли он вообще в нем содержаться?каким образом?

Автор: volvo 23.02.2010 19:53

Переменная типа String (если ты о Паскалевском типе) устроена так, что ей не надо маркер конца строки - длина строки хранится в ее первом байте. Если надо строку с терминатором - пользуйся типом PChar - это аналог С-шных строк, оканчивающихся нулем.

В крайнем случае, можно и в String записать символ #0, но при выводе этой строки стандартными методами, такой маркер не будет приниматься во внимание:

var s: string;
begin
s := 'test '#0' it';
writeln(s);
end.
Будет выведено
test   it


, а не просто "test"...

Можно, опять же, считать, что любой символ (например '#') - это маркер конца строки, но тогда тоже придется переписывать функции работы со строками...

Автор: SKVOZNJAK 27.02.2010 2:15

Причём здесь ноль - в виндовсе и досе другой маркер конца строки. Не проверял, как выводится в виндовсе символы маркера - 13 и 10, но в линуксе всё работает. Здесь маркер состоит из одного символа с порядковым номером 10

var
S:String;

begin
S:='1234567890';
S[9]:=Chr(10);
writeln('');
writeln(S);
end.


http://www.radikal.ru

Автор: volvo 27.02.2010 3:18

Цитата
Причём здесь ноль - в виндовсе и досе другой маркер конца строки
Правда что-ли? #13 и #10 - это вообще-то CR/LF (Carriage Return/Line Feed), что в переводе означает
Цитата
Возврат каретки - символ, при выводе которого курсор перемещается к левому краю поля, не меняя высоту.
...
Подача строки - символ при выводе которого «курсор» перемещается на следующую строку.
Где здесь маркер, повествующий о том, что строка уже закончилась, и дальше не нужно ее просматривать, можно поподробнее?

Автор: SKVOZNJAK 27.02.2010 21:36

Цитата
, что в переводе означает

Английский язык за качество не пинал только фанат и ленивый.

Цитата
Где здесь маркер, повествующий о том, что строка уже закончилась, и дальше не нужно ее просматривать, можно поподробнее?


Создай простой текст в редакторах типа блокнота на разных операционках и просмотри побайтово. Нету там нуля в конце строки. Символы #13,#10 стандарт по факту маркера EOL для виндовса, #10 для линукса, #13 для макинтоша. Первоначально стандарты как раз и разрабатывались для удобства печатания: операционки-то были маленькие а принтеры матричные, насыщать текстовики вордовским мусором было совсем не обязательно.
Текст набранный в блокноте:
Код
qwe
1234
ddfgghj

А вот как этот текст выглядит в редакторе в виде двоичного файла
http://www.radikal.ru
#0 в ASCII шрифте выглядит также как и #32, и где он здесь между строк? Конец строки обозначается маркером #13,#10. Аналогичная картина в досе и линуксе, маки не тестил, но по коственным данным (кнопкам в редакторе kwrite)и там в конце строки простого текстового файла ставится не #0. Поставь #0 в концах строк в батника, запусти и полюбуйся на глюки. Похоже система об упоминаемом тобой формате ничего не знает.