Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2011, 00:14   #1
husker
Новичок
Джуниор
 
Регистрация: 06.10.2011
Сообщений: 2
По умолчанию Преобразование строк в *.dfm файлах.

Доброго времени суток уважаемые программисты. Пишу курсовую на тему "проверка орфографии в Delphi приложениях". Т.е. программа, которая будет проверять в Delphi исходниках все возможные строки введенные разработчиком на наличие орфографических ошибок.

Как я понял, в dfm фалах хранятся все заданные в инспекторе объектов свойства форм и компонентов на этих формах. Естественно мое приложение должно проверять на орфографию строковые свойства в этих файлах, например свойство caption у формы.

Но возник ряд проблем, связанных со строками в dfm фалах. Открыв один из таких файлов блокнотом я увидел, что строки в них хранятся в следующем виде:

Caption = #1092#1086#1088#1084#1072' '#1087#1077#1088#1074#1072#1103
Caption = 'форма первая'

Подскажите пожалуйста самый рациональный способ, как вытащить подобные строки из dfm фала и преобразовать "нормальный" вид. Ну и конечно, как после редактирования этой строки моим приложением, преобразовать его обратно в "формат dfm строк" и запихнуть обратно в файл. За ранее благодарен.
husker вне форума Ответить с цитированием
Старый 15.11.2011, 01:20   #2
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

можно написать программу, с помощью которой можно конвертировать подобные "строки". потом её использовать.

хотя, на самом деле, эта "строчка" - последовательность символов. в dfm файле русские строчки хранятся именно так.
Хамяг вне форума Ответить с цитированием
Старый 15.11.2011, 06:53   #3
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Строки хранятся в формате UTF-8 (десятичное значение), я не помню есть ли стандартные функции по переводу кода UTF-8 в символ, но суть такая:
1) Перевести Dec в Hex (например #1092=444)
2) в соответствии с таблицей символов подобрать символ (http://sadesign.ru/tools/unicode/ например)

ну и обратное преобразование аналогично
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 23.11.2011, 07:59   #4
husker
Новичок
Джуниор
 
Регистрация: 06.10.2011
Сообщений: 2
По умолчанию

В общем не нашел я стандартных функций перевода юникода. Сделал выборку на все 66 символов русского алфавита.
husker вне форума Ответить с цитированием
Старый 23.11.2011, 08:21   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

если хотите, то посмотрите программку DfmUn2An (бесплатная, с исходным кодом)
ссылочка.

Цитата:
DfmUn2An (Dfm Unicode To Ansi)
------------------------------
Программа переводит ресурс dfm-файла(ов) из Unicode в Ansi.
Это нужно для совместимости Delphi 5 с более поздними версиями
Delphi 6, 7... Они используют Unicode, а Delphi 5 Ansi.
(с)
Александр Бартов 15.03.2003
E-mail: delphikol@narod.ru
WEB-page: http://delphikol.narod.ru

правда, она под KOL заточена, но идею оттуда взять вполне можно:
Код:
//======================================
//== ПЕРЕВОД СТРОКИ ИЗ UNICODE В ANSI ==
//======================================
function StrUnic2Ansi(Str: string): string;
var
  x: Integer;
  Num: string;
begin
  //== Удаляем из строки символы <'> - #39
  x := Pos(#39, Str);
  repeat
    Delete(Str, x, 1);
    x := Pos(#39, Str);
  until x = 0;

  for x := Pos('#', Str) to Length(Str) - 4 do
    if (Str[x + 1] in ['0'..'9']) and (Str[x + 2] in ['0'..'9']) and
       (Str[x + 3] in ['0'..'9']) and (Str[x + 4] in ['0'..'9']) then
    begin
      Num := Str[x + 1] + Str[x + 2] + Str[x + 3] + Str[x + 4];
      Delete(Str, x, 5);
      Insert(WideChar(StrToInt(Num)), Str, x);
    end;

  //== Переводим '#39' в <'>
  x := Pos('#39', Str);
  if x = 0 then
  begin
    Result := Str;
    Exit;
  end;

  repeat
    Delete(Str, x, 3);
    Insert(#39, Str, x); // '#39' -> <'>
    x := Pos('#39', Str);
  until x = 0;
  Result := Str;
end;

// пример использования
procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text := StrUnic2Ansi(''#1092#1086#1088#1084#1072' '#1087#1077#1088#1074#1072#1103'');
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задачи по очистке строк в лог файлах vwmexanik Помощь студентам 1 25.06.2011 10:20
Замена строк в файлах kniazkinP Общие вопросы Delphi 0 27.10.2010 09:27
преобразование строк imperceptible4462 Помощь студентам 14 07.09.2010 06:50
Поиск одинаковых строк в файлах xls valeryana Microsoft Office Excel 10 22.09.2009 11:45
Как посчитать сумму строк во всех текстовых файлах? qwestor PHP 8 30.12.2007 16:02