![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Пишу функцию, которая преобразует строку в целочисленный массив и возвращет его. В качестве параметров функция принимает строку и разделитель.Основная проблема-это возвращаемое значение.
1) Создавал отдельный пользовательский тип, создавал массив указанного типа и записывал в него, но возникли сложности с преобразованием строки к пользовательскому типу-Delphi7 не хочет преобразовывать строку к пользовательскому типу. 2) Создавал отдельный пользовательский тип, отдельный массив и и пробовал через переменную-посредника типа Variant запихнуть значения в массив-резуьтат тот же, что и в п.1 Подскажите пожалуйста, как можно решить проблему возвращаемого значения. |
|
#2
|
|||
|
|||
|
Код твой давай. Там посмотрим
|
|
#3
|
||||
|
||||
|
Чего проще, объяви динамический массив и наращивай его по мере надобности.
|
|
#4
|
|||
|
|||
|
Код:
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; |
|
#5
|
|||
|
|||
|
Цитата:
|
|
#6
|
||||
|
||||
|
Ну и строку до кучи давай.
|
|
#7
|
|||
|
|||
|
9,6,4,12,5,2,6,5,7,5,3,11,10,5,10,7
|
|
#8
|
||||
|
||||
|
Примерно так:
Код:
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;Ааа..., так там у тебя ошибочка была при обращении к массиву, выход за пределы диапазона. Последний раз редактировалось angvelem, 20.07.2011 в 01:15. |
|
#9
|
||||
|
||||
|
Лучше маленько изменить код:
Код:
...
SetLength(generated_arr, Count);
v := temp_str;
generated_arr[Count - 1] := v;
v := '';
temp_str := '';
inc(Count);
... |
|
#10
|
|||
|
|||
|
Код:
type TMass = array of integer; function parse(inputString, delimiter: string): TMass; var i: integer; M: TMass; begin SetLength(M, 0); inputString := Trim(inputString) + delimiter; i := Pos(delimiter, inputString); while i <> 0 do begin SetLength(M, Length(M) + 1); M[High(M)] := StrToInt(Trim(Copy(inputString, 1, i - 1))); Delete(inputString, 1, i); i := Pos(delimiter, inputString); end; Result := M; end; |
|
#11
|
||||
|
||||
|
Запользуй регэкспы
![]() |
|
#12
|
|||
|
|||
|
можно ещё memo использовать
PHP код:
|
|
#13
|
||||
|
||||
|
Цитата:
З.Ы. Уж больно код твой дикий ![]() |
|
#14
|
||||
|
||||
|
Цитата:
З.Ы. Уж больно код твой дикий ![]() |
|
#15
|
|||
|
|||
|
Только только добрался до Интернета.Всем ОГРОМНОЕ СПАСИБО. Заработало!!!!!!!!!!!!!!!!
|