powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Парсинг строк для ленивых
16 сообщений из 16, страница 1 из 1
Парсинг строк для ленивых
    #39678878
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли в стандартной Tokyo нечто, что может такую строку
Код: pascal
1.
'CN=User,OU=SubDep\,OU\=1,OU=Dep,DC=Dom'


разложить на компоненты?

В идеале хочется увидеть такой массив
Код: pascal
1.
['CN', 'User', 'OU', 'SubDep,OU=1', 'OU', 'Dep', 'DC', 'Dom']



Проблема в экранирующем символе

String.Split умеет парсить закавыченные строки. А экранированные нет.

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678881
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Есть ли в стандартной Tokyo нечто, что может такую строку
Код: pascal
1.
'CN=User,OU=SubDep\,OU\=1,OU=Dep,DC=Dom'


разложить на компоненты?

В идеале хочется увидеть такой массив
Код: pascal
1.
['CN', 'User', 'OU', 'SubDep,OU=1', 'OU', 'Dep', 'DC', 'Dom']



Проблема в экранирующем символе

String.Split умеет парсить закавыченные строки. А экранированные нет.

С уважением, Vasilisk

По-моему, написать свой быстрее, чем ждать ответа
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678882
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Заменить экранированные символы на что-то типа %$$$$%, потом распарсить Split`ом ? А после сплита вернуть взад замену.
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678893
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterЗаменитьДа вариантов куча. Если писать, тогда уже обычным циклом. Интересно было есть ли что-то стандартное?
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678903
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_DarkMasterЗаменитьДа вариантов куча. Если писать, тогда уже обычным циклом. Интересно было есть ли что-то стандартное?
Использовать нормальные компоненты/классы для работы с active directory.
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678909
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi нормальные компоненты/классы "нормальных" классов я там не увидел
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678938
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_В идеале хочется увидеть такой массив
['CN', 'User', 'OU', 'SubDep,OU=1', 'OU', 'Dep', 'DC', 'Dom']

Не совсем понятно по какому принципу строится массив. Но первое, что приходит в голову, это:
Код: pascal
1.
'CN=User,OU=SubDep\,OU\=1,OU=Dep,DC=Dom'.Split(['=', ',', '\']);


Будут лишние пустые элементы, но для настоящих программистов это же не страшно? :-)
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678946
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimonkaНе совсем понятно по какому принципу строится массивСтрока разбивается на подстроки ра разделителю ",", а потом каждая подстрока разбивается на "имя", "значение" по "=". При этом символ "\" является экранирующим
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678963
haydegen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_DimonkaНе совсем понятно по какому принципу строится массивСтрока разбивается на подстроки ра разделителю ",", а потом каждая подстрока разбивается на "имя", "значение" по "=". При этом символ "\" является экранирующим

может тогда обычный TStringList лучше использовать ?
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678975
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
haydegenTStringListУ него та же проблема, что и у String.Split. Он умеет работать с закавыченными строками, но не умеет с экранированными
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39678988
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддержки Escape символов, вроде бы, нет. Не паскалевская фича. Да и задача чересчур специфическая. Если нет особых требований по скорости, я бы посоветовал долгий путь заменами:
\\ => \slash\
\, => \comma\
\= => \eq\
...
split по ","
подстановки все заменить на символы для каждого элемента.

Либо, чуть быстрее и короче:
\\ => \slash\
\, => \comma\
\= => \eq\
...
, => #0 (точно не встретится в корректной исходной строке)
подстановки заменить на символы
split по #0
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39679069
Фотография Dimonka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно.. оптимизируйте:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
var
  s: string;
  i: Integer;
  CurChar, PrevChar: Char;
  k: Integer;
  res: TStringList;
begin
  res := TStringList.Create;
  s := 'CN=User,OU=SubDep\,OU\=1,OU=Dep,DC=Dom';
  k := 1;
  PrevChar := #0;
  for i := 1 to Length(s) do
  begin
    CurChar := s[i];
    if (CurChar in [',', '=']) and (PrevChar <> '\') and
      ((i - 1) > k) then
    begin
      res.add(StringReplace(copy(s, k, i - k), '\', '', [rfReplaceAll]));
      k := i + 1;
    end;
    PrevChar := CurChar;
  end;
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39679082
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня свой метод "для ленивых".

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function CutSubParam(var Text: String; Delimeter: String = ';'): String;
var
  p : integer;
begin
  p:=pos(Delimeter,Text);
  if p=0 then begin
    Result:=Text;
    Text:='';
  end else begin
    Result:=copy(Text,1,p-1);
    Text:=copy(Text,p+length(Delimeter),length(Text));
  end;
end;



А потом
Код: pascal
1.
2.
3.
4.
  Line:='CN=User,OU=SubDep\,OU\=1,OU=Dep,DC=Dom';
  CN:=CutSubParam(Line,'=');
  User:=CutSubParam(Line,',');
  //и т.д.
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39679130
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatУ меня свой метод "для ленивых".
который обломается на первом эскейпнутом символе
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39679154
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

Он не для этого сделан.
...
Рейтинг: 0 / 0
Парсинг строк для ленивых
    #39679641
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatУ меня свой метод "для ленивых".Да свой и я вчера написал
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Парсинг строк для ленивых
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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