Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

динамический двумерный массви [D7, D2005, 2003]


Страницы:   1 2

Std ©   (2006-04-08 18:48:00) 


uses
 SysUtils;
var
arr:array of array of string;
r,i,j,n,q:integer;
str:string;
begin
randomize;
q:=1;
n:=0;
for I:=0 to 10 do
 begin
   r:=random(2);
   if r<1 then
     begin
       SetLength(arr,10,q);
       arr[i,n]:=inttostr(r);
       inc(q);
       inc(n);
     end;
 end;
for I :=0 to length(arr) do
 begin
   for j:= 0 to length('длинна подмасива') do
    writeln(arr[j]);
 end;
readln;
end.

вообщем нада создать массив массивов(двумерный массив) сколько в нем будет i-ых элементов известно(10), а вот сколько будет j-ых элементов заранее не известно. Вот чтото не могу я понять что и куда всунуть нада в код чтоб оно работало :(


Std   (2006-04-09 00:43:00) [21]

2Rial
не работает. так как StringList который содержит дату начала и дату конца недели в одной строке в виде 01.01.2006-07.01.2006
т.е. список имеет вид:
01.01.2006-07.01.2006
08.01.2006-14.01.2006
15.01.2006-21.01.2006
и т.д.
если не сложно подскажите пж как переделать что бы работало.
а то уже сил нет весь день сидеть над этим куском кода :((


Rial   (2006-04-08 21:12:00) [22]


Type TArr=Array of Array of String;

function BuildSL(Out Arr:TArr;Const SL:TStringList;
                Const FileName:String):Boolean;
{
SL - Тот самый список, в котором, однако, хнанятся только
даты окончания неделей.
В SL.Strings[0] хранится начальная дата.
}
Var FileSL:TStringList;//Данные фaйла
   P,I,J,K,L,LL:Integer;
   S:String;
begin
Result:=False;
FileSL:=TStringList.Create;
Try
 Try
  FileSL.LoadFromFile(FileName);
 Except
  Exit;
 end;
 FileSL.Sorted:=True;// =:= FileSL.Sort
 L:=FileSL.Count;
 LL:=SL.Count;
 SetLength(Arr,L);
 I:=0;
 J:=0;
 S:=SL.Strings[J];
 While (I<=L-1)and(Copy(FileSL.Strings[I],1,10)<S)do
  Inc(I);
 While (I<=L-1)and(J<LL-1) do begin
  P:=I;
  Inc(J);
  S:=SL.Strings[J];
  While (P<=L-1)and(Copy(FileSL.Strings[P],1,10)<S)do
   Inc(P);
  If (P>I)then
   SetLength(Arr[J-1],P-I);
  For K:=0 to P-I-1 do
   Arr[J-1][K]:=FileSL.Strings[I+K];
  I:=P;
 end;
 SetLength(Arr,J-1);
Finally
 FileSL.Free;
end;
Result:=True;
end;//BuildSL


Проверка:

Var SL:TStringList;
   Arr:TArr;
begin
SL:=TStringList.Create;
Try
 SL.LoadFromFile('2.txt');
 BuildSL(Arr,SL,'1.txt');
Finally
 SL.Free;
end;


<2.txt>
01.01.2006
03.01.2006
10.01.2006
10.04.2006
17.04.2006
<1.txt>
02.01.2006,слово1,слово2,слово3
03.01.2006,слово1,слово2,слово3
05.01.2006,слово1,слово2,слово3
10.04.2006,слово1,слово2,слово3
11.04.2006,слово1,слово2,слово3
12.04.2006,слово1,слово2,слово3

Все работает.


Std   (2006-04-08 20:16:00) [23]

Ладно, попробую обрисовать саму задачу, може подскажете какойто другой алгоритм ее решения...
есть файл в нем каждая строка имеет формат
Дата,слово1,слово2,слово3
есть StringList в котором каждая строка это дата_начала_недели-дата_конца_недели(чтото типа 01.01.2006-07.01.2006)
нада проверить весь файл и сгруппировать строки из файла по неделям
Например:
в файле есть строки:
02.01.2006,слово1,слово2,слово3
03.01.2006,слово1,слово2,слово3
05.01.2006,слово1,слово2,слово3
10.04.2006,слово1,слово2,слово3
11.04.2006,слово1,слово2,слово3
12.04.2006,слово1,слово2,слово3
нада чтобы в результате получился массив вида:
arr[0]
 |
 -->arr2[0]=02.01.2006,слово1,слово2,слово3
 |
 -->arr2[1]=03.01.2006,слово1,слово2,слово3
 |
 -->arr2[2]=05.01.2006,слово1,слово2,слово3
arr[1]
 |
 -->arr2[0]=10.04.2006,слово1,слово2,слово3
 |
 -->arr2[0]=11.04.2006,слово1,слово2,слово3
 |
 -->arr2[0]=12.04.2006,слово1,слово2,слово3

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


Std   (2006-04-08 19:54:00) [24]

Anatoly Podgoretsky
q это начальный размер второго массива.
большой массив указывается
SetLength(arr,10);
а q это уже начальный размер arr[0](маленького массива)

Rial
но тут же тоже приходится указывать размер AllocArray(Arr,[5,6,7,8]);
а я этого самог размера не знаю :(


Rial   (2006-04-08 19:44:00) [25]

program MyProject;
{$AppType  Console}
Type MyType=Array of Array of String;

procedure AllocArray(Out Arr:MyType;
                    Const Sizes:Array of Integer);
Var I,L:Integer;
begin
L:=Length(Sizes);
SetLength(Arr,L);
For I:=0 to L-1 do
 SetLength(Arr[I],Sizes[I]);
end;

Var Arr:MyType;
begin
Randomize;
AllocArray(Arr,[5,6,7,8]);
Arr[0,4]:='La-la !';
WriteLn(Arr[0,4]);
ReadLn;
end.


Anatoly Podgoretsky   (2006-04-08 19:41:00) [26]

q=1=одномерный массив


Std   (2006-04-08 19:26:00) [27]

ну q вроде как указывает сколько должно быть элементов в "маленьком" массиве. Если не правильно делаю подскажите пж как зделать правильно, а то уже пол дня сижу над этим массивом и ничерта н получается :(


Anatoly Podgoretsky   (2006-04-08 19:21:00) [28]

Зачем нужен двухмерный массив, если q=1?


Std   (2006-04-08 19:18:00) [29]

вот делаю вот так:

SetLength(arr,10);
n:=0;
q:=1;
for I:=0 to 9 do
 begin
   r:=random(2);
   n:=0;
   q:=1;
   if r<5 then
     begin
       SetLength(arr[i],q);
       arr[i,n]:=inttostr(r);
       inc(q);
       inc(n);
     end;
 end;

но добавляется оно вот так:
arr[0]
 |
 -->arr[0]=значение
arr[1]
 |
 -->arr[0]=пусто
 |
 -->arr[1]=значение
arr[2]
 |
 -->arr[0]=пусто
 |
 -->arr[0]=пусто
 |
 -->arr[1]=значение

такое впечетления что я не там делаю n:=0 q:=1
а куда его правильно всунуть не соображу никак :(


Std   (2006-04-08 19:09:00) [30]

в том то и дело что в var нада обявить только A:array of array of string;
а потом дальше уже указать размер большого массива, а потом размеры маленьких :(


begin...end   (2006-04-08 18:58:00) [31]

> нада создать массив массивов(двумерный массив) сколько в
> нем будет i-ых элементов известно(10), а вот сколько будет
> j-ых элементов заранее не известно.

var
 A: array [1..10] of array of string;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо