Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 931

/ вопрос открыт /

Здравствуйте! Недавно просматривал код парсера SimpleXML и наткнулся на немного странный кусок кода (в прилож.). Подскажите, что означает запись: "^M^J" и можно ли ее записать как-нибудь по проще?

Приложение:
  1. ...
  2. function EnumAttrValue(aNode: TXmlNode; anAttrData: PXmlAttrData;
  3. const aValues: array of TXmlString): Integer;
  4. var
  5. anAttrValue: TXmlString;
  6. s: String;
  7. i: Integer;
  8. begin
  9. anAttrValue := anAttrData.Value;
  10. for Result := 0 to Length(aValues) - 1 do
  11. if AnsiCompareText(anAttrValue, aValues[Result]) = 0 then
  12. Exit;
  13. if Length(aValues) = 0 then
  14. s := ''
  15. else begin
  16. s := aValues[0];
  17. for i := 1 to Length(aValues) - 1 do
  18. s := s + ^M^J + aValues[i];
  19. end;
  20. raise Exception.CreateFmt(
  21.  
  22.  
  23. '%s', [aNode.FNames.GetName(anAttrData.NameID), aNode.Get_NodeName, s]);
  24. end;
  25. ...


SMaks Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: SMaks (статус: 1-ый класс)
Вопрос отправлен: 21 сентября 2007, 00:47
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, SMaks!
Сколько раз людям говорю: "Учите матчасть." В старых книгах часто пишут интересные вещи.
То, на что вы наткнулись - совершенно законное свойство языка, известрое с древних времён языка Паскаль
Если говорить по простому, то ^M - это символ (можно себе представить, что это константа такая) и равна она #13 (тоесть символ с кодом 13). что бы найти соответсвие, просто выписываем латынский алфавит. буковка A - 1, B -2 и так до Z = 26.
Это чем то похоже на сишные \n \t \b. даже буквы совпадают

а теперь по коду. Конструкция
s := s + ^M^J + aValues[i];
эквивалентна
s := s + #13+#10 + aValues[i];
или
s := s + #13#10 + aValues[i];
или
s := s + chr(13) + chr(10) + aValues[i];
и всё для того, что бы вставить перевод строки...
по поводу эффективности все приведённые варианты эквивалентны.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 21 сентября 2007, 01:18
Оценка за ответ: 5

Комментарий к оценке: Спасибо.

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.