powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог функции Split в Delphi
21 сообщений из 46, страница 2 из 2
Аналог функции Split в Delphi
    #39313870
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314117
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delphinotes,

Интересно в качестве примера (а ещё с record'ами можно так), но IMHO не хватает

1) нескольких quote-символов ( например ' и " и ` )
2) нескольких разделителей ( например для "яблоко, груша" - оставлять пробел перед грушей смысла нет)
3) implicit-typecast из строки
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314156
Фотография DetSimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,
2. Trim() спасет Вас
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314175
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DetSimenArioch,
2. Trim() спасет Вас

Спасёт. Вот только чем больше мне спасательных кругов надо снаружи навешивать - тем меньше пользы от таких пяти копеек.

Код: pascal
1.
2.
3.
4.
5.
var s: string;
begin
  for s in JclStringList.Split('яблоко, груша, персик, виноград').Trim do
     Writeln(s);
end;



Вот так будет проще.
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314212
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch,

там есть опция ioTrimValues
(ещё в продакшене у меня есть ioSkipEmpty, реализуется двумя строками, потому обновлять в блоге не стал)
Ну а насчёт нескольких квотов/делимитров - такой задачи не было. И оно усложнит код..
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314252
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DetSimenа в ХЕ10 уже даже есть TStringHelper.Split. :)ХЕ3
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314479
Ребята, не надо ничего выдумавать и наворачивать навороты :)
Исходная задача решается буквально парой строк кода,
и всё работает начиная как минимум с Delphi 7 (а то и с Delphi 5)

Вот:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var s,s1:string; SL:TStringList;
begin
  s := 'арбуз;дыня;слива;вишня';
  SL := TStringList.Create;
  s1 := StringReplace(s, ';', sLineBreak, [rfReplaceAll]);  // <-- Вот оно, решение
  SL.Text := s1;
  Memo1.Lines.Assign(SL);
  SL.Free;
end;
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314490
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсёНамногоПроще,

Топикстартеру нужен массив строк на выходе а не стринглист.
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314529
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсёНамногоПроще
Код: pascal
1.
s1 := StringReplace(s, ';', sLineBreak, [rfReplaceAll]);  // <-- Вот оно, решение


да уж, раздвигать строку с копированием, потом еще раз, потом еще раз - только для того, чтобы потом порезать на части.

Ну... можно и так конечно, но лучше резать на части сразу :-)
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314530
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсёНамногоПроще,

кроме того, если вдруг #13 или #10 встретятся этой строке сами по себе = то будет нежданчик
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314532
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка

Arioch
Код: pascal
1.
2.
3.
4.
5.
var s: string;
begin
  for s in JclStringList.Split('яблоко, груша, персик, виноград' , ',').Trim do
     Writeln(s);
end;
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314671
Фотография Makar4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatВсёНамногоПроще,

Топикстартеру нужен массив строк на выходе а не стринглист.ТС не определился 11 лет назад ещё )))
Стринглист - тоже массив )))
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39314768
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пипец, 10лет теме, этож надо раскопать такой труп.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Аналог функции Split в Delphi
    #39849533
prexcel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZrenBy, прошу прощения предлагаю альтернативу - даже для D7 пойдёт
Код: c#
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 TMainForm.Button7Click(Sender: TObject);
var
    sl:TStringList;

  function Split(Delimiter: String; DelimitedText: String):TStringList;
  var
    sl: TStringList;
     n: Integer;
     i: Integer;
     s: String;
  begin
    sl := TStringList.Create;

    s:= '';
    for i := 1 to length (DelimitedText) do begin
      if DelimitedText[i] = Delimiter[1] then begin
        if s <> '' then sl.Add(s);
        s := '';
      end
      else 
         s:= s+DelimitedText[i]; 
    end;
    if s <> '' then  sl.Add(s);

     // когда насмотритесь на результат закомментируйте следующую строку
      for n:=0 to(sl.Count-1)do Application.MessageBox(PChar(sl.Strings[n]),'',0);  
                                                                                                                      
      Result := sl;
  end;

begin
  sl := Split (';', ';123;456;789;');  // ставьте разделители сколько хотите и где хотите
        // вытаскиваем из sl
  sl.Free;
end;
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39849551
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prexcelZrenBy, прошу прощения предлагаю альтернативу - даже для D7 пойдёт
Код: c#
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 TMainForm.Button7Click(Sender: TObject);
var
    sl:TStringList;

  function Split(Delimiter: String; DelimitedText: String):TStringList;
  var
    sl: TStringList;
     n: Integer;
     i: Integer;
     s: String;
  begin
    sl := TStringList.Create;

    s:= '';
    for i := 1 to length (DelimitedText) do begin
      if DelimitedText[i] = Delimiter[1] then begin
        if s <> '' then sl.Add(s);
        s := '';
      end
      else 
         s:= s+DelimitedText[i]; 
    end;
    if s <> '' then  sl.Add(s);

     // когда насмотритесь на результат закомментируйте следующую строку
      for n:=0 to(sl.Count-1)do Application.MessageBox(PChar(sl.Strings[n]),'',0);  
                                                                                                                      
      Result := sl;
  end;

begin
  sl := Split (';', ';123;456;789;');  // ставьте разделители сколько хотите и где хотите
        // вытаскиваем из sl
  sl.Free;
end;

Какой кошмар...
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39849655
AleksR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prexcel, все уже навелосипедено до нас :)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  sl := TStringList.Create;
  sl.Delimiter := Delimiter;  // например ';'
//    sl.QuoteChar := '"';  // - если нужно
  sl.StrictDelimiter := True;
  sl.DelimitedText := DelimitedText;
// тут получаем строки из SL
  sl.Free;
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39849669
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksRprexcel, все уже навелосипедено до нас :)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  sl := TStringList.Create;
  sl.Delimiter := Delimiter;  // например ';'
//    sl.QuoteChar := '"';  // - если нужно
  sl.StrictDelimiter := True;
  sl.DelimitedText := DelimitedText;
// тут получаем строки из SL
  sl.Free;


Что за велосипеды, если есть стандартный функионал...
Код: pascal
1.
var arr := 'asd;zxc;xcv,fg,gh;asd,sdf'.Split([';', ',']);
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39850115
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Что за велосипеды, если есть стандартный функионал...
Код: pascal
1.
var arr := 'asd;zxc;xcv,fg,gh;asd,sdf'.Split([';', ',']);




Error 121 invalid qualifier
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39850150
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

Однако, строковые хелперы имеют место не во всех версиях Delphi.
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39850222
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FLocksmithPC,

Однако, строковые хелперы имеют место не во всех версиях Delphi.

Ага :( Delphi 1 стошнило и она выплюнула еррор :(
...
Рейтинг: 0 / 0
Аналог функции Split в Delphi
    #39850223
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

Ага!! - сказали суровые сибирские мужики.))
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог функции Split в Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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