передача параметра в функцию : array of string

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: передача параметра в функцию : array of string

Сообщение Alex2013 » 05.07.2020 13:34:06

sunjob писал(а):как все сложно-то, а?! :о) ладушки... может проще будет передать указатель на массив? или все равно прийдется в цикле присвоение делать?

Я в подобных случаях использую простейший парсинг строк .
Код: Выделить всё
// Мини парсер строк
Function Next1(Var SS:String;Ch:Char):String;
var i:Longint;
begin
Result:='';
  I:=Pos(Ch,SS);
  If i>0 then begin
   Result:= Copy (ss,1,i-1);
delete(SS,1,i);
  end
end;
...
// юзается так
S:='1,2,3,4';
if s<>'' then begin
while Pos(',',S)<>0 do List.Add( Next1(S,',')); if S<>'' then List.Add(S);
end;
// или так (последний символ  строки обязательно '/' )
S:='1/2/3/4/';
while S<>'' do List.Add( Next1(S,'/'));

То есть по сути все решается одной строчкой .
Плюс можно достаточно просто ловить и более сложные конструкции .
Последний раз редактировалось Alex2013 05.07.2020 14:43:52, всего редактировалось 5 раз(а).
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: передача параметра в функцию : array of string

Сообщение Снег Север » 05.07.2020 14:03:53

sunjob, объявить тип:
Код: Выделить всё
type
Tmyarg :array of string;
...
var
   myarg :Tmyarg ;
...
function run_cmd(const _cmd: string; const _arg: Tmyarg ; const _dir: string):integer;
...

SetLength(myarg,...);
...

run_cmd(..., myarg, ...);
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: передача параметра в функцию : array of string

Сообщение iskander » 05.07.2020 14:29:58

Снег Север писал(а):sunjob, объявить тип:

Он давно уже объявлен в модуле SysUtils.
Откликается на TStringArray(хм, кто бы подумал).
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: передача параметра в функцию : array of string

Сообщение zub » 05.07.2020 15:11:42

ТС объясни пжст для тупых в чем проблема, с простым воспроизводимым кодом?
Вот тут все работает:
Код: Выделить всё
program Project1;

uses process;

function run_cmd(const _cmd: string; const _arg: array of string; const _dir: string):integer;
var
rez:string;
begin
  RunCommandIndir(_dir,_cmd,_arg,rez);
  writeln(rez);
end;

var
commands:array of string;
begin
  setlength(commands,2);commands[0]:='fpc';commands[1]:='lazarus';
  //commands:=['fpc','lazarus'];//в 3.0.4 это еще не работает
  run_cmd('ping',commands,'d:\');
  run_cmd('ping',['fpc','lazarus'],'d:\');
end. 


fpc 3.0.4, но винда
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: передача параметра в функцию : array of string

Сообщение Alex2013 » 05.07.2020 15:23:03

iskander писал(а):Он давно уже объявлен в модуле SysUtils.
Откликается на TStringArray(хм, кто бы подумал).

Можно и так, но непонятно чем это отличается прямого объявления "A:Array of String;" :?:
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: передача параметра в функцию : array of string

Сообщение iskander » 05.07.2020 16:00:10

Если непонятна разница между
Код: Выделить всё
function run_cmd(const _cmd: string; const _arg: array of string; const _dir: string): integer;
и
Код: Выделить всё
function run_cmd(const _cmd: string; const _arg: TStringArray; const _dir: string): integer;

то следует учить матчасть.

zub писал(а)://commands:=['fpc','lazarus'];//в 3.0.4 это еще не работает

однако вполне себе работает
Код: Выделить всё
commands := TStringArray.Create('fpc','lazarus');
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: передача параметра в функцию : array of string

Сообщение zub » 05.07.2020 16:16:25

>>commands:=['fpc','lazarus'];//в 3.0.4 это еще не работает
и
>>commands := TStringArray.Create('fpc','lazarus');
Про матчасть промолчу, но разница не маленькая. TStringArray.Create кстати тоже не так давно появился
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: передача параметра в функцию : array of string

Сообщение Alex2013 » 05.07.2020 16:20:28

iskander писал(а):то следует учить матчасть.

Нет "на уровне практики" разница понятна но чисто теоретически именно для Array of String; разницы быть не должно. Это же не фиксированный массив, не запись, не объект или класс . Array of String; всегда и всюду одинаков. То есть он не может внезапно стать Array of Longint;
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: передача параметра в функцию : array of string

Сообщение iskander » 05.07.2020 16:31:11

zub, про матчасть это в порядке сообщений(в сторону Alex2013)
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: передача параметра в функцию : array of string

Сообщение Alex2013 » 05.07.2020 17:07:06

iskander писал(а):zub, про матчасть это в порядке сообщений(в сторону Alex2013)

Ну "моя сторона" как бы не против . :wink: Матчасть вещь полезная. А вообще извиняюсь, что влез толком не вникнув . Жара на мое и так не очень продвинутое "критическое мышление" явно отрицательно виляет.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: передача параметра в функцию : array of string

Сообщение sunjob » 05.07.2020 19:06:26

to Alex2013
в подобных случаях использую простейший парсинг строк

по "идее" должны быть родные парсеры
https://www.cyberforum.ru/lazarus/thread2146885.html
но у меня "опять-таки" не проканало, выдает ошибку
Код: Выделить всё
main.pas(10,10) Error: Illegal qualifier


...

to Снег Север
объявить тип

согласен, я тоже этим грешу, не люблю читать все подряд... если не сильно надо :о)
... надо специльно определять тип и использовать его ...


...

to iskander
SysUtils / TStringArray

так точно! ну...точно помнил... помнил, но забыл :о)

...

to zub
для тупых в чем проблема, с простым воспроизводимым кодом?

нууу... как бы так, что-бы не обидеться самому... :о)
че и как вы там собирали ...?! сами-же видите, все против и говорят, что так по умолчанию не только нельзя, но и не получится в принцыпе!!!
:о) у меня не проканало :о) fpc.cfg практически не настраивал ... ось-линух (винды даже в мыслях нет :о)

доберусь до железки, взгляну еще раз дотошным взглядом :о)
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54

Re: передача параметра в функцию : array of string

Сообщение zub » 05.07.2020 19:41:02

sunjob
в оригинале было:
>>ТС объясни пжст для тупых в чем проблема
я туплю и не вижу проблему. Обидеть никого не хотел))
В приведенном мной примере насколько я понимаю какраз то что у вас не работает, или нет?
Чтоб избежать флуда, давайте законченые независимые примеры
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: передача параметра в функцию : array of string

Сообщение sunjob » 05.07.2020 20:05:16

> Обидеть никого не хотел)
да все нормально :о) (это смайлик, глазики, носик, и рот)

по поводу примера - у меня примерно так-же как у вас ... но выдает ошибку... ваш пример с ходу не запустился из-за отличия в параметрах RunCommandIndir()
а может у вас все нормально собралось без ошибок из-за того, как раз, что у вас винда... (ну мало-ли, в качестве бреда... мы много чего не знаем... :о)

> законченые независимые примеры
согласен! :о) (но опять таки, у меня линух)
Аватара пользователя
sunjob
постоялец
 
Сообщения: 123
Зарегистрирован: 12.01.2011 15:19:54

Re: передача параметра в функцию : array of string

Сообщение Дож » 05.07.2020 20:48:56

У меня работает пример zub'а в двух конфигурациях
- Linux x86_64, fpc 3.0.4
- Linux ARM, fpc 3.0.0
только строки нужно переделать на AnsiString переписыванием или при помощи -Sh, $H+ или режимом DELPHI.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: передача параметра в функцию : array of string

Сообщение zub » 05.07.2020 20:53:38

>>из-за отличия в параметрах RunCommandIndir()
а RunCommandIndir случайно нигде не переопределен от fpcшного?
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru