Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2012, 10:54   #1
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию Вывод массива из процедуры

Среда разработки - Делфи.

Есть процедура procedure блабла(a: integer; var b: array of string);
Эта процедура находится внутри другой процедуры.
Во-первых у меня не получается задать длину массива b, пишет: Incompatible types.
Во-вторых мне надо заполнить этот массив, но из-за того, что выше написано, не получается, а мне его надо вытащить на внешнюю процедуру.

Заранее спс.

Последний раз редактировалось Skalp; 14.01.2012 в 11:04.
Skalp вне форума Ответить с цитированием
Старый 14.01.2012, 10:59   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Во-первых у меня не получается задать длину массива b, пишет: Incompatible types.
эээээ
SetLength(b, <range>) - ???
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 14.01.2012, 11:01   #3
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
эээээ
SetLength(b, <range>) - ???
вот тут и ошибка: Incompatible types.
Дело в том, что если объявить массив после procedure blabla(...), то все нормально, но массив уже не вытащить(
Skalp вне форума Ответить с цитированием
Старый 14.01.2012, 11:08   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код покажите! Я же не телепат!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 14.01.2012, 11:10   #5
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Код:
procedure MessDelim(str: string; var ms_count: integer; var mess_array: array of string);
var tempstring: string;
begin
ms_count:=0;
RegExp := TRegExpr.Create;
  try
    tempstring:='';
    RegExp.Expression := '[-a-zA-Z\dа-яА-Я{}\\:"\[\]_\s]{1,}[^,]';
    if RegExp.Exec(str) then
    begin
      repeat
        if RegExp.Match[0][length(RegExp.Match[0])]<>'}' then
          begin
            if tempstring=''
            then tempstring:=tempstring+RegExp.Match[0]
            else tempstring:=tempstring+','+RegExp.Match[0];
          end
        else
          begin
            inc(ms_count);
            setlength(mess_array,ms_count);
            mess_array[ms_count-1]:=tempstring+','+RegExp.Match[0];
            tempstring:='';
            memo1.Lines.Add(mess_array[ms_count-1]);
          end;
      until not RegExp.ExecNext;
    end
    else
      exit;
  finally
    RegExp.Free;
  end;
end;
Skalp вне форума Ответить с цитированием
Старый 14.01.2012, 11:35   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

А тьфу!
Конструкция array of string означает динамический массив везде, кроме параметров подпрограмм - где она означает открытый массив.
Вот так!
Так что изменить размер не удасться!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 14.01.2012, 11:40   #7
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Какими еще способами можно вывести динамический массив из процедуры?
Skalp вне форума Ответить с цитированием
Старый 14.01.2012, 12:01   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Так ну давай те рассуждать проще!
Вам нужно хранилище строк, причём динамическое!
Так чё бы вам не использовать глобальный
TStrings ??
как то так
Код:
uses
    Classes //и остальные модули
var
    s: TStrings;
begin
    // тут в самом начале вызываем конструктор
    s := TString.Create;
    //потом код там всякий
    //в конце
   s.Free
end.
ну соответственно вашу процедуру меняем как-то так
Код:
procedure MessDelim(str: string);
var tempstring: string;
begin
RegExp := TRegExpr.Create;
  try
    tempstring:='';
    RegExp.Expression := '[-a-zA-Z\dа-яА-Я{}\\:"\[\]_\s]{1,}[^,]';
    if RegExp.Exec(str) then
    begin
      repeat
        if RegExp.Match[0][length(RegExp.Match[0])]<>'}' then
          begin
            if tempstring=''
            then tempstring:=tempstring+RegExp.Match[0]
            else tempstring:=tempstring+','+RegExp.Match[0];
          end
        else
          begin
            s.Add(tempstring+','+RegExp.Match[0]);
            tempstring:='';
            //вот тут самое интересное переменная для хранения длины нам не нужна
            // тк есть s.Count;
            // но я не помню как индексируются строки с 0 или 1 так что проверяйте
            memo1.Lines.Add(s.Strings[s.Count-1]);
          end;
      until not RegExp.ExecNext;
    end
    else
      exit;
  finally
    RegExp.Free;
  end;
end;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 14.01.2012, 12:06   #9
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Всем спасибо, все работает.

Последний раз редактировалось Skalp; 14.01.2012 в 12:57.
Skalp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача имени массива в переменную процедуры KORT Общие вопросы Delphi 3 14.11.2011 15:22
Вывод работы процедуры на экран User1992 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 06.11.2011 20:24
Вывод массива используя 2 процедуры(Turbo Pascal). anton_hoff Помощь студентам 1 29.03.2011 20:52
процедуры и функции и сортировка массива в Паскале! Jumper_9091 Помощь студентам 1 29.04.2010 23:19
Пробема объявления массива в заголовке процедуры. mmx358 Паскаль, Turbo Pascal, PascalABC.NET 16 29.06.2009 09:46