Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.07.2011, 00:26
Hellion Hellion вне форума
Прохожий
 
Регистрация: 19.07.2011
Сообщения: 8
Репутация: 10
По умолчанию Функция преобразования строки в целочисленный массив

Пишу функцию, которая преобразует строку в целочисленный массив и возвращет его. В качестве параметров функция принимает строку и разделитель.Основная проблема-это возвращаемое значение.
1) Создавал отдельный пользовательский тип, создавал массив указанного типа и записывал в него, но возникли сложности с преобразованием строки к пользовательскому типу-Delphi7 не хочет преобразовывать строку к пользовательскому типу.
2) Создавал отдельный пользовательский тип, отдельный массив и и пробовал через переменную-посредника типа Variant запихнуть значения в массив-резуьтат тот же, что и в п.1
Подскажите пожалуйста, как можно решить проблему возвращаемого значения.
Ответить с цитированием
  #2  
Старый 20.07.2011, 00:30
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Код твой давай. Там посмотрим
Ответить с цитированием
  #3  
Старый 20.07.2011, 00:42
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Чего проще, объяви динамический массив и наращивай его по мере надобности.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 20.07.2011, 00:53
Hellion Hellion вне форума
Прохожий
 
Регистрация: 19.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Чего проще, объяви динамический массив и наращивай его по мере надобности.
Дык я так и сделал.Проблема в преобразовании типов. Т.е. когда я в цикле бегу по строке,пишу в переменную текущее значение и пытаюсь запихнуть его в массив, то у меня возникает AV
Ответить с цитированием
  #5  
Старый 20.07.2011, 00:49
Hellion Hellion вне форума
Прохожий
 
Регистрация: 19.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Код:
type
 int_arr:array of integer;
end;

function parse_string_to_array(parsing_str,splitter:string):int_arr;
   var
     i,counter,str_length:integer;
     generated_arr:int_arr;
     temp_str:string;
     v:variant;
   begin
     counter:=1;
     Setlenght(generated_arr,counter);
     str_length:=length(parsing_str);
     for i:=1 to (str_length)+1 do
     begin
       if(parsing_str[i]<>splitter) and (parsing_str[i]<>#0) then
       begin
         temp_str:=temp_str+parsing_str[i];
       end
       else
       begin
         v:=temp_str;
         generated_arr[counter]:=v;
         v:='';
         inc(counter);
         SetLenght(generated_arr,counter);
       end;
     end;
   end;
Ответить с цитированием
  #6  
Старый 20.07.2011, 00:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну и строку до кучи давай.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 20.07.2011, 00:56
Hellion Hellion вне форума
Прохожий
 
Регистрация: 19.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

9,6,4,12,5,2,6,5,7,5,3,11,10,5,10,7
Ответить с цитированием
  #8  
Старый 20.07.2011, 01:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Примерно так:
Код:
type
  int_arr = array of Integer;

function TForm2.Parse_string_to_array(parsing_str, splitter : String) : int_arr;
var
  I, Count, str_length : Integer;
  generated_arr : int_arr;
  temp_str : String;
  v : variant;
begin
  SetLength(generated_arr, 0);
  Result := generated_arr;
  if parsing_str = '' then
    Exit;

  Count := 1;
  temp_str := '';
  SetLength(generated_arr, Count);
  str_length := Length(parsing_str);
  for I := 1 to str_length + 1 do
  begin
    if (parsing_str[i] <> splitter) and (parsing_str[i] <> #0) then
      temp_str := temp_str + parsing_str[i]
    else
    begin
      v := temp_str;
      generated_arr[Count - 1] := v;
      v := '';
      temp_str := '';
      inc(Count);
      SetLength(generated_arr, Count);
    end;
  end;
  Result := generated_arr;
end;

procedure TForm2.Button3Click(Sender: TObject);
var
  arr : int_arr;
begin
  arr := Parse_string_to_array('9,6,4,12,5,2,6,5,7,5,3,11,10,5,10,7', ',');
end;
Всё работает, никаких AV я не получил.
Ааа..., так там у тебя ошибочка была при обращении к массиву, выход за пределы диапазона.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 20.07.2011 в 01:15.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter