Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FreePascal метод String.Split  [new]
zedxxx
Member

Откуда:
Сообщений: 140
В Delphi вот такой код не работает:

var
  VArr: TStringDynArray;
begin
  VArr := '1-2;3-4'.Split('-;');
  ...


т.к. все перегруженные функции требуют на вход массив строк или символов.

В тоже время этот код нормально работает во FreePascal, хотя, судя по сорцам, там тоже нету перегруженной функции, которая принимает на вход просто строку. Как такое может быть?

P. S. В Lazarus нормально продебажить не получается, дебагер не хочет проваливаться внутрь функции Split :(
13 ноя 21, 22:52    [22395717]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

zedxxx
Как такое может быть?

Очевидно строковый литерал в FPC совместим (или неявно преобразуется в) array of
char.

Posted via ActualForum NNTP Server 1.5

13 ноя 21, 22:58    [22395718]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 15425
а если как-то так заменить?

function func1(const list: string): boolean;
var
  IdArray: TStringDynArray;
begin
  IdArray := SplitString(list, ',');
14 ноя 21, 00:43    [22395738]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
zedxxx
В Delphi вот такой код не работает:
Логично. В Делфи нет типа TStringDynArray
14 ноя 21, 16:33    [22395871]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
zedxxx
хотя, судя по сорцам, там тоже нету перегруженной функции, которая принимает на вход просто строку. Как такое может быть?

А ты передаёшь не строку, а открытый массив чаров. Передать таким же образом переменную строкового типа не получится, если только явно не указать частичную передачу массива.

_Vasilisk_
В Делфи нет типа TStringDynArray

Давно заглядывал в Delphi?
14 ноя 21, 16:48    [22395883]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
Kazantsev Alexey
Давно заглядывал в Delphi?
Только что. Версия 10.3.1
[dcc32 Error] Unit1.pas(462): E2003 Undeclared identifier: 'TStringDynArray'
14 ноя 21, 16:50    [22395885]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
_Vasilisk_,

Ну так открой для себя System.Types.
14 ноя 21, 17:03    [22395891]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
zedxxx
Member

Откуда:
Сообщений: 140
На самом деле туда точно так же можно передать и строку. Код скомпилируется, но работать уже как надо не будет. Из-за этого я столкнулся с багом в FPC в SplitString (зарепортил и уже пофиксили в trunk).

Опасная фишка, раз они даже в rtl из-за неё баги делают.
14 ноя 21, 17:44    [22395916]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

zedxxx
Опасная фишка, раз они даже в rtl из-за неё баги делают.

Для багов в RTL им не нужен повод.

Posted via ActualForum NNTP Server 1.5

14 ноя 21, 17:48    [22395919]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
zedxxx
На самом деле туда точно так же можно передать и строку.

У меня, на девелоперской ветке, компилятор строку принимает только если использовать синтаксис передачи части массива.
14 ноя 21, 17:52    [22395920]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
zedxxx
Member

Откуда:
Сообщений: 140
Kazantsev Alexey,
https://gitlab.com/freepascal.org/fpc/source/-/issues/39437
14 ноя 21, 18:07    [22395925]     Ответить | Цитировать Сообщить модератору
 Re: FreePascal метод String.Split  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
zedxxx,

Щьёрт! Что-же у меня сегодня не компилировалось..

Предложил другое решение:
https://gitlab.com/freepascal.org/fpc/source/-/commit/1c7709e45478a49df04b12338765e2b97cff3519#note_732677716
14 ноя 21, 18:34    [22395931]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить