Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
12 / 8 / 6
Регистрация: 10.07.2011
Сообщений: 369
Записей в блоге: 1
1

Массив и Count

21.07.2011, 13:39. Показов 768. Ответов 8
Метки нет (Все метки)

Почему в следующем коде динамический массив не заполняется и Count=0
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var
Str1,DS:TStringList;
NM,x,xx,s:string;
n,b,i,k,q:integer;
begin
  MD.clear;
  str1:=TStringList.Create;
  DS:=TStringList.Create;
  str1.LoadFromFile(path);
  NM:='';
  x:='';
  if str1.count>1 then
  begin
    if pos('#MEM#',Str1[0])=1 then
      begin
      b:=str1.count-1;
      i:=1;
      while i<=b do
      begin
 
        if pos('#NM',str1[i])=1 then
        begin
          s:=str1[i];
          delete(s,1,3);
          NM:=copy(s,1,pos('#NB',s)-1);
          delete(s,1,pos('#NB',s)+2);
          n:=strtoint(copy(s,1,(pos('#X',s)-1)));
          delete(s,1,pos('#X',s)+1);
          xx:=s;
        end;
 
        if pos ('#DS',str1[i])=1 then
        begin
          s:=str1[i];
          delete(s,1,3);
          k:=strtoint(s);
          if k>0 then
          begin
            q:=I+k;
            i:=i+1;
            while i<q do
            begin
              ds.add(str1[i]);
              i:=i+1;
            end;
            DS.add(str1[i]);
          end;
        end;
 
        if pos('##',str1[i])=1 then
        begin
         MD.Add;
         with   MD.Items[MD.Count-1] do
         begin
          Name:=nm;
          x:=xx;
          number:=n;
          Description.AddStrings(DS);
 
          memo1.Lines.Add('Name: '+nm);
         memo1.Lines.Add('Type:'+xx);
         memo1.Lines.Add('Number: '+inttostr(n));
         memo1.Lines.AddStrings(DS);
         end;
        { memo1.Lines.Add('Name: '+nm);
         memo1.Lines.Add('Type:'+xx);
         memo1.Lines.Add('Number: '+inttostr(n));
         memo1.Lines.AddStrings(DS);}
         nm:='';
         n:=-1;
         xx:='';
         DS.Clear;
        end;
        i:=i+1;
end;
end;
  end;
end;
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2011, 13:39
Ответы с готовыми решениями:

Нюансы синтаксиса: statement for - как понимать запись for (count=0, mask=1; count != 16; count++, mask<<= 1)?
Много всяких языков попадалось, относительно много конечно, но такое вижу первый раз, что бы тело...

Ошибка MySQL error: Column count doesn't match value count at row 1
Подскажите, пожалуйста где тут ошибка? Вылазит ошибка: MySQL error: Column count doesn't match...

Ошибка в запросе: Column count doesn't match value count at row 1
Здравствуйте, я новичок в изучении php и sql. При добавлении новой книги в БД необходимо выбрать...

Почему dataGridView1.Rows.Count, но textbxox1.Lines.Count() ?
Почему в одном случае нужно писать круглые скобки, а в другие не нужно?

8
25 / 24 / 4
Регистрация: 24.05.2011
Сообщений: 111
21.07.2011, 13:41 2
Не увидел я у вас динамического массива.
Где его определение?
0
12 / 8 / 6
Регистрация: 10.07.2011
Сообщений: 369
Записей в блоге: 1
21.07.2011, 13:44  [ТС] 3
Цитата Сообщение от Jetus Посмотреть сообщение
Не увидел я у вас динамического массива.
Где его определение?
Он в другом модуле...
Вот:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
unit DrmU;
 
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
   Controls, Forms,
  Dialogs, XPMan, StdCtrls, Buttons, ExtCtrls, ComCtrls;
//---------------------------------------------
type
 TDream=class(TCollectionItem)
  private
   FName: string;
   FDate:TDateTime;
   FTypeD:integer;
   FStringsD:TStringList;
   FComments:TStringList;
   FMembers:String;
   FLocality:String;
  public
    property Name:string read FName write FName;
    property Date:TDateTime read FDate write FDate;
    property TypeD:integer read FTypeD write FTypeD;
    property StringsD:TStringList read FStringsD write FStringsD;
    property Comments:TStringList read FComments write FComments;
    property Members:String read FMEmbers write FMembers;
    property Locality:String read FLocality write FLOcality;
    procedure Assign(Source: TPersistent); override;
    constructor Create(Collection:TCollection);override;
end;
Type TMemberD=class(TCollectionItem)
  private
    FName:string;
    FNumber:integer;
    FX:string;
    Fdescription:TStringList;
  public
    property Name:string read FName write FName;
    property Number:integer read FNumber write FNumber;
    property X:string read FX write FX;
    property Description:TStringList read FDescription write FDescription;
    procedure Assign(Source: TPersistent); override;
    constructor Create(Collection:TCollection);override;
  end;
 
//------------------------------------------------
   TMembersDColl=class(TCollection)
   private
      function GetItem(index:integer):TMemberD;
      procedure SetItem(index:integer;Value:TMemberD);
    //  function Insert(Index: Integer): TDream;
   public
      function Add:TMemberD;
      property Items[Index:integer]:TMemberD read GetItem write SetItem;
   end;
   TDreamsCollection=class(TCollection)
      private
      function GetItem(index:integer):TDream;
      procedure SetItem(index:integer;Value:TDream);
      function Insert(Index: Integer): TDream;
   public
      function Add:TDream;
      property Items[Index:integer]:TDream read GetItem write SetItem;
   end;
//--------------------------
  TDreamsCom=class(TComponent)
  private
   FDreamsCollection:TDreamsCollection;
   FMembersDColl:TMembersDColl;
   FLocalityColl:TMemBersDColl;
  public
 
      constructor Create(AOwner:TComponent); override;
      destructor Destroy;override;
     // procedure Save(Path:String;Comp:TComponent);
     // procedure Load(Path:String;Comp:TComponent);
      property DreamsCollection:TDreamsCollection read FDreamsCollection write FDreamsCollection;
      property MembersDColl:TMembersDColl read FMembersDColl write FMembersDColl;
    property LocalityColl:TMembersDColl read FLocalityColl write FLocalityColl;
  end;
implementation
 
 
{ TDream }
 
procedure TDream.Assign(Source: TPersistent);
 begin
 if Source is TDream then
  begin
    //Êîïèðîâàíèå íîâûõ ïîëåé.
    FName := TDream (source).FName;
    FDate :=TDream (Source).FDate;
    FTypeD :=TDream (Source).FTypeD;
    FStringsD.Assign(TDream(Source).FStringsD);
    FComments.Assign(TDream(Source).FComments);
    FMembers :=TDream (Source).FMembers;
    FLocality :=TDream (Source).FLocality;
  end;
  inherited Assign(Source);
end;
 
constructor TDream.Create(Collection: TCollection);
begin
inherited create(Collection);
FName:='';
FTypeD:=0;
FDate:=strtodatetime('11.11.2011');
FStringsD:=TStringList.Create;
FComments:=TStringList.Create;
FMembers:='';
FLocality:='';
end;
 
 
{ TDreamsCollection }
 
function TDreamsCollection.Add: TDream;
begin
Result := TDream.Create(Self);
end;
 
function TDreamsCollection.GetItem(index: integer): TDream;
begin
 Result := TDream(inherited GetItem(Index));
end;
 
function TDreamsCollection.Insert(Index: Integer): TDream;
begin
Result := TDream(inherited Insert(Index));
end;
 
procedure TDreamsCollection.SetItem(index: integer; Value: TDream);
begin
  GetItem(Index).Assign(Value);
end;
 
{ TDreamsCom }
 
constructor TDreamsCom.Create(AOwner: TComponent);
begin
  inherited create(AOwner);
  DreamsCollection:=TDreamsCollection.Create(TDream);
  MembersDColl:=TMembersDcoll.Create(TMemberD);
  LocalityColl:=TMembersDColl.Create(TMemberD);
end;
 
destructor TDreamsCom.Destroy;
begin
  DreamsCollection.Free;
  MembersDcoll.Free;
  inherited;
end;
{
procedure TDreamsCom.Load(Path: String; Comp: TComponent);
var 
ms: TMemoryStream;
fs: TFileStream;
begin
 
fs := TFileStream.Create(path, fmOpenRead);
ms := TMemoryStream.Create;
try
   ObjectTextToBinary(fs, ms);
   ms.position := 0;
   ms.ReadComponent(Comp);
finally
   ms.Free;
   fs.free;
end;
 
 
 
end; }
{
procedure TDreamsCom.Save(Path: String;Comp:TComponent);
var 
ms: TMemoryStream;
fs: TFileStream;
begin
fs := TFileStream.Create(path, fmCreate or fmOpenWrite);
ms := TMemoryStream.Create;
try
   ms.WriteComponent(Comp);
   ms.position := 0;
   ObjectBinaryToText(ms, fs);
finally
   ms.Free;
   fs.free;
end;
 
 
end;
      }
 
 
{ TMemberD }
 
procedure TMemberD.Assign(Source: TPersistent);
begin
  if Source is TMemberD then
  begin
    FName:=TMemberD(Source).FName;
    FNumber:=TMemberD(source).FNumber;
    FX:=TMemberD(source).FX;
    FDescription.Assign(TMemberD(source).FDescription) ;
  end;
  inherited Assign(Source);
end;
 
constructor TMemberD.Create(Collection: TCollection);
begin
  inherited create(Collection);
  FName:='';
  FNumber:=0;
  FX:='';
  FDescription:=TSTringList.Create;
end;
 
{ TMembersDColl }
 
function TMembersDColl.Add: TMemberD;
begin
Result:=TMemberD.Create(self);
end;
 
 
 
function TMembersDColl.GetItem(index: integer): TMemberD;
begin
 Result:=TMemberD(inherited GetItem(index));
end;
 
procedure TMembersDColl.SetItem(index: integer; Value: TMemberD);
begin
GetItem(index).Assign(Value);
end;
 
end.
0
25 / 24 / 4
Регистрация: 24.05.2011
Сообщений: 111
21.07.2011, 13:51 4
Спрашиваю еще раз: где у вас ОПРЕДЕЛЕНИЕ вашего массива? Как он в приведенном куске назван? Ну не телепат я, уж простите!

Добавлено через 2 минуты
Если я все же прочитал вашу мысль, тогда попробуйте так:
Delphi
1
2
3
4
5
MDItem := MD.Add;
with MDItem do
begin
...
end;
0
12 / 8 / 6
Регистрация: 10.07.2011
Сообщений: 369
Записей в блоге: 1
21.07.2011, 13:58  [ТС] 5
Цитата Сообщение от Jetus Посмотреть сообщение
Спрашиваю еще раз: где у вас ОПРЕДЕЛЕНИЕ вашего массива? Как он в приведенном куске назван? Ну не телепат я, уж простите!

Добавлено через 2 минуты
Если я все же прочитал вашу мысль, тогда попробуйте так:
Delphi
1
2
3
4
5
MDItem := MD.Add;
with MDItem do
begin
...
end;
MDItem - какого типа???
0
25 / 24 / 4
Регистрация: 24.05.2011
Сообщений: 111
21.07.2011, 14:00 6
Цитата Сообщение от Bohes Посмотреть сообщение
MDItem - какого типа???
Delphi
1
TMemberD
0
12 / 8 / 6
Регистрация: 10.07.2011
Сообщений: 369
Записей в блоге: 1
21.07.2011, 14:07  [ТС] 7
Нет не помогает...
Странно, но аналогичная функция загрузки для DreamsCollection работает
0
25 / 24 / 4
Регистрация: 24.05.2011
Сообщений: 111
21.07.2011, 14:09 8
Цитата Сообщение от Bohes Посмотреть сообщение
Нет не помогает...
Странно, но аналогичная функция загрузки для DreamsCollection работает
А ты вообще уверен, что твое условие выполняется:
Delphi
1
if pos('##',str1[i])=1 then
Поставь там точку останова и посмотри, куда оно пойдет.
0
12 / 8 / 6
Регистрация: 10.07.2011
Сообщений: 369
Записей в блоге: 1
21.07.2011, 14:37  [ТС] 9
Да, в мемо строки появляются

Добавлено через 24 минуты
Все работает, это я ошибся...
а как исправить этот код, выдает, что неверное число...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 s:=DC.DreamsCollection.Items[i].Members;
    IF Length(s)>1 then
    Begin
    s:=s+' ';
    while pos(' ',s)>0 do
    begin
    j:=StrToInt(copy(s,1,pos(' ',s)-1));
    delete(s,1,pos(' ',s));
    if j>0 then
    begin
    it:=MemLv.Items.Add;
    It.Caption:=DC.MembersDColl.Items[j].Name;
    It.SubItems.Add(inttostr(j));
    end; end; end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2011, 14:37

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Обход COUNT(.)/COUNT(*) Делитель равен нулю
Задание: Список подразделений (id и название), в которых более половины сотрудников получают...

Column count doesn't match value count at row 1
Доброго времени суток. Помогите пожалуйста с проблемой, третий день не могу понять.... После...

Column count doesn't match value count at row 1
Добавляю данные через форму в БД, но выдает ошибку Column count doesn't match value count at row 1....

Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это?
Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.