powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
20 сообщений из 20, страница 1 из 1
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39735903
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто в dfm файлах написанное кириллицей преобразуется в вид #1044#1086#1073#1072#1074#1080#1090#1100
это слово Добавить.
Как искать в очень большом проекте компоненты, которые содержат такие слова?:
1. С помощью XE6 IDE.
2. С использованием сторонних поиск программ.
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39735915
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ctrl+F = "#1044#1086#1073#1072#1074#1080#1090#1100" -> Find
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39735928
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAry,

я фаром ищу alt+f7 > *.dfm, #1044#1086#1073#1072#1074#1080#1090#1100 > Enter.
несколько секунд и фар пробежит сотни форм.
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39735936
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonAdamAry,

я фаром ищу alt+f7 > *.dfm, #1044#1086#1073#1072#1074#1080#1090#1100 > Enter.
несколько секунд и фар пробежит сотни форм.
Как получаешь #1044#1086#1073#1072#1074#1080#1090#1100 перед поиском?
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39735969
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

первое, что приходит на ум — вписать текст в какое-нибудь поле формы, сохранить её и скопипастить строку из DFM.
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736054
gfdsaq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AdamAry, написать простенькую программу

Два Edit и одна кнопка

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
procedure TForm1.Button1Click(Sender: TObject);
var
  CPLng: integer;
  p: PChar;
  uniCode: cardinal;
  sInput, sRes: string;
begin
  Edit2.Text := '';

  sInput := Trim(Edit1.Text);
  if sInput = '' then Exit;

  p := PChar(sInput);
  sRes := '';
  while True do begin
    unicode := UTF8CharacterToUnicode(p, CPLng);
    if (CPLng = 0) or (unicode = 0) then Break;
    if unicode in [32..127] then begin
      if (sRes <> '') and (sRes[Length(sRes)] = '''') then
        Delete(sRes, Length(sRes), 1)
      else
        sRes := sRes + '''';
      if uniCode = ord('''') then
        sRes := sRes + ''''
      else
        sRes := sRes + Chr(uniCode);
      sRes := sRes + '''';
    end
    else
      sRes := sRes + '#' + IntToStr(unicode);
    inc(p, CPLng);
  end;
  Edit2.Text := sRes;
  Edit2.SelectAll;
end;
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736075
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

function DfmString(const str: string): string;
var
  v, c: string;
begin
  Result := '';
  for v in str.Split(['#']) do
  begin
    c := v.Trim;
    if c <> '' then
      Result := Result + chr(StrToInt(c));
  end;
end;

function StringToDfm(const str: string): string;
var
  ch: Char;
begin
  Result := '';
  for ch in str do
    Result := Result + '#' + ord(ch).ToString;
end;

var
  s: string;

begin
  try
    s := '#1044#1086#1073#1072#1074#1080#1090#1100';
    s := DfmString(s);
    Writeln(s);
    Writeln(StringToDfm(s));
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736189
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
в Excele
Как получаешь #1044#1086#1073#1072#1074#1080#1090#1100 перед поиском?

Как можно получить штатными средствами delphi?
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736202
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfdsaq,
какой юнит подсоединять для UTF8CharacterToUnicode(p, CPLng); ?
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736221
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfdsaq,
чем можно заменить UTF8CharacterToUnicode(p, CPLng) для XE6?
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736253
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAryштатными средствами delphi
Гирлионайльдо
Код: pascal
1.
StringToDfm

DelphiMainMenu > Tools > Configure Tools > Add...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
program StringToDfm;

uses
  Dialogs,
  SysUtils,
  Clipbrd;

{$R *.res}

  function DoStringToDfm(const str: string): string;
  var
    ch: Char;
  begin
    Result := '';
    for ch in str do
      Result := Result + '#' + ord(ch).ToString;
  end;

begin
  Clipboard.AsText := DoStringToDfm(InputBox('StringToDfm', 'String', ''));
end.


...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736283
gfdsaq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AdamAryчем можно заменить UTF8CharacterToUnicode(p, CPLng) для XE6?
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=76026
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
function Utf8CharacterToUnicode(p: PChar; out CharLen: integer): Cardinal;
begin
if p<>nil then
  begin

  if Ord(p^)<192 then
    begin
  Result:=Ord(p^);
  CharLen:=1;
    end
  else
  if ((Ord(p^) and 224)=192) then
    begin

    if (Ord(p[1]) and 192)=128 then
      begin
    Result:=((Ord(p^) and 31) shl 6) or (Ord(p[1]) and 63);
    CharLen:=2;
      end
    else
      begin
    Result:=Ord(p^);
    CharLen:=1;
      end;

    end
  else
  if ((Ord(p^) and 240)=224) then
    begin

    if ((Ord(p[1]) and 192)=128) and ((Ord(p[2]) and 192)=128) then
      begin
    Result:=((Ord(p^) and 31) shl 12) or ((Ord(p[1]) and 63) shl 6) or (Ord(p[2]) and 63);
    CharLen:=3;
      end
    else
      begin
    Result:=Ord(p^);
    CharLen:=1;
      end;

    end
  else
  if ((Ord(p^) and 248)=240) then
    begin

    if ((Ord(p[1]) and 192)=128) and ((Ord(p[2]) and 192)=128) and ((Ord(p[3]) and 192)=128) then
      begin
    Result:=((Ord(p^) and 31) shl 18) or ((Ord(p[1]) and 63) shl 12) or ((Ord(p[2]) and 63) shl 6) or (Ord(p[3]) and 63);
    CharLen:=4;
      end
    else
      begin
    Result:=Ord(p^);
    CharLen:=1;
      end;

    end
  else
    begin
  Result:=Ord(p^);
  CharLen:=1;
    end;
  end
else
  begin
Result:=0;
CharLen:=0;
  end;
end;


оригинальная функция freepascal
% - префикс двоичной константы
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
function UTF8CharacterToUnicode(p: PChar; out CharLen: integer): Cardinal;
{ if p=nil then CharLen=0 otherwise CharLen>0
  If there is an encoding error the Result is 0 and CharLen=1.
  Use UTF8FixBroken to fix UTF-8 encoding.
  It does not check if the codepoint is defined in the Unicode tables.
}
begin
  if p<>nil then begin
    if ord(p^)<%11000000 then begin
      // regular single byte character (#0 is a normal char, this is pascal ;)
      Result:=ord(p^);
      CharLen:=1;
    end
    else if ((ord(p^) and %11100000) = %11000000) then begin
      // starts with %110 => could be double byte character
      if (ord(p[1]) and %11000000) = %10000000 then begin
        CharLen:=2;
        Result:=((ord(p^) and %00011111) shl 6) or (ord(p[1]) and %00111111);
        if Result<(1 shl 7) then begin
          // wrong encoded, could be an XSS attack
          Result:=0;
        end;
      end else begin
        Result:=ord(p^);
        CharLen:=1;
      end;
    end
    else if ((ord(p^) and %11110000) = %11100000) then begin
      // starts with %1110 => could be triple byte character
      if ((ord(p[1]) and %11000000) = %10000000)
      and ((ord(p[2]) and %11000000) = %10000000) then begin
        CharLen:=3;
        Result:=((ord(p^) and %00011111) shl 12)
                or ((ord(p[1]) and %00111111) shl 6)
                or (ord(p[2]) and %00111111);
        if Result<(1 shl 11) then begin
          // wrong encoded, could be an XSS attack
          Result:=0;
        end;
      end else begin
        Result:=ord(p^);
        CharLen:=1;
      end;
    end
    else if ((ord(p^) and %11111000) = %11110000) then begin
      // starts with %11110 => could be 4 byte character
      if ((ord(p[1]) and %11000000) = %10000000)
      and ((ord(p[2]) and %11000000) = %10000000)
      and ((ord(p[3]) and %11000000) = %10000000) then begin
        CharLen:=4;
        Result:=((ord(p^) and %00001111) shl 18)
                or ((ord(p[1]) and %00111111) shl 12)
                or ((ord(p[2]) and %00111111) shl 6)
                or (ord(p[3]) and %00111111);
        if Result<(1 shl 16) then begin
          // wrong encoded, could be an XSS attack
          Result:=0;
        end;
      end else begin
        Result:=ord(p^);
        CharLen:=1;
      end;
    end
    else begin
      // invalid character
      Result:=ord(p^);
      CharLen:=1;
    end;
  end else begin
    Result:=0;
    CharLen:=0;
  end;
end;


...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736291
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GExpert умеет.
удобно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736340
edruzenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

у меня gexpert не ищет по русским тесктам в dfm (10.2)
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736434
tb3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tb3
Гость
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736520
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus,
как закинуть в Delphi XE6?:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
program StringToDfm;

uses
  Dialogs,
  SysUtils,
  Clipbrd;

{$R *.res}

  function DoStringToDfm(const str: string): string;
  var
    ch: Char;
  begin
    Result := '';
    for ch in str do
      Result := Result + '#' + ord(ch).ToString;
  end;

begin
  Clipboard.AsText := DoStringToDfm(InputBox('StringToDfm', 'String', ''));
end.


:скомпилировать, что получить в итоге?
чтобы потом можно было использовать в
DelphiMainMenu > Tools > Configure Tools > Add...
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736522
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gfdsaq,
как закинуть в новый юнит эту функцию?:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
function Utf8CharacterToUnicode(p: PChar; out CharLen: integer): Cardinal;
begin
if p<>nil then
  begin

  if Ord(p^)<192 then
    begin
  Result:=Ord(p^);
  CharLen:=1;
    end
  else
  if ((Ord(p^) and 224)=192) then
    begin

    if (Ord(p[1]) and 192)=128 then
      begin
    Result:=((Ord(p^) and 31) shl 6) or (Ord(p[1]) and 63);
    CharLen:=2;
      end
    else
      begin
    Result:=Ord(p^);
    CharLen:=1;
      end;

    end
  else
  if ((Ord(p^) and 240)=224) then
    begin

    if ((Ord(p[1]) and 192)=128) and ((Ord(p[2]) and 192)=128) then
      begin
    Result:=((Ord(p^) and 31) shl 12) or ((Ord(p[1]) and 63) shl 6) or (Ord(p[2]) and 63);
    CharLen:=3;
      end
    else
      begin
    Result:=Ord(p^);
    CharLen:=1;
      end;

    end
  else
  if ((Ord(p^) and 248)=240) then
    begin

    if ((Ord(p[1]) and 192)=128) and ((Ord(p[2]) and 192)=128) and ((Ord(p[3]) and 192)=128) then
      begin
    Result:=((Ord(p^) and 31) shl 18) or ((Ord(p[1]) and 63) shl 12) or ((Ord(p[2]) and 63) shl 6) or (Ord(p[3]) and 63);
    CharLen:=4;
      end
    else
      begin
    Result:=Ord(p^);
    CharLen:=1;
      end;

    end
  else
    begin
  Result:=Ord(p^);
  CharLen:=1;
    end;
  end
else
  begin
Result:=0;
CharLen:=0;
  end;
end;


Вот создал юнит
Код: pascal
1.
2.
3.
4.
5.
6.
7.
unit Unit2;

interface

implementation

end.


:и куда вставлять эту функцию и другие функции?
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736531
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAryma1tus,
как закинуть в Delphi XE6?:Открой Блокнот, вставь текст, сохрани в файл под именем StringToDfm.dpr, открой этот файл в Delphi, скомпилируй, в итоге получи программу
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39736866
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus,
так и сделал
Открой Блокнот, вставь текст, сохрани в файл под именем StringToDfm.dpr, открой этот файл в Delphi, скомпилируй, в итоге получи программу.

Ошибка:
[DCC Error] stringtodfm.dpr(2): E2029 Declaration expected but end of file found
...
Рейтинг: 0 / 0
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
    #39737008
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAryma1tus,
так и сделал ok, "закинуть" не удалось, пока читаешь книжки - используй это
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]