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

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

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

первое, что приходит на ум — вписать текст в какое-нибудь поле формы, сохранить её и скопипастить строку из DFM.
...
Рейтинг: 0 / 0
21.11.2018, 12:44
    #39736054
gfdsaq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
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
21.11.2018, 13:13
    #39736075
Гирлионайльдо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
Код: 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
21.11.2018, 15:03
    #39736189
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
wadman,
в Excele
Как получаешь #1044#1086#1073#1072#1074#1080#1090#1100 перед поиском?

Как можно получить штатными средствами delphi?
...
Рейтинг: 0 / 0
21.11.2018, 15:26
    #39736202
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
gfdsaq,
какой юнит подсоединять для UTF8CharacterToUnicode(p, CPLng); ?
...
Рейтинг: 0 / 0
21.11.2018, 16:00
    #39736221
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
gfdsaq,
чем можно заменить UTF8CharacterToUnicode(p, CPLng) для XE6?
...
Рейтинг: 0 / 0
21.11.2018, 17:02
    #39736253
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
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
21.11.2018, 17:23
    #39736283
gfdsaq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
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
21.11.2018, 17:35
    #39736291
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
GExpert умеет.
удобно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.11.2018, 18:18
    #39736340
edruzenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
Мимопроходящий,

у меня gexpert не ищет по русским тесктам в dfm (10.2)
...
Рейтинг: 0 / 0
21.11.2018, 21:49
    #39736434
tb3
tb3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
...
Рейтинг: 0 / 0
22.11.2018, 07:09
    #39736520
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
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
22.11.2018, 07:17
    #39736522
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
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
22.11.2018, 08:09
    #39736531
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
AdamAryma1tus,
как закинуть в Delphi XE6?:Открой Блокнот, вставь текст, сохрани в файл под именем StringToDfm.dpr, открой этот файл в Delphi, скомпилируй, в итоге получи программу
...
Рейтинг: 0 / 0
22.11.2018, 15:04
    #39736866
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как искать в dfm слова вида #1044#1086#1073#1072#1074#1080#1090
ma1tus,
так и сделал
Открой Блокнот, вставь текст, сохрани в файл под именем StringToDfm.dpr, открой этот файл в Delphi, скомпилируй, в итоге получи программу.

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


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