Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Цикл по структуре / 12 сообщений из 12, страница 1 из 1
20.12.2005, 17:06
    #33447286
uuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Подскажите плиз, можно ли в цикле ходить по структуре, если можно то как?:) Спасибо.
...
Рейтинг: 0 / 0
20.12.2005, 17:31
    #33447379
DvB
DvB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Поясните плиз, если по структуре, то по какой? Они, структуры разные бывают...
...
Рейтинг: 0 / 0
21.12.2005, 10:42
    #33448427
alexis glinski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
uuserПодскажите плиз, можно ли в цикле ходить по структуре, если можно то как?:) Спасибо.
а зачем ???
...
Рейтинг: 0 / 0
21.12.2005, 13:47
    #33449245
rhs
rhs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Код: plaintext
1.
2.
3.
mystructure lstr[]
...
lstr[ ll_ndx].var= '123'
...
Рейтинг: 0 / 0
21.12.2005, 14:37
    #33449451
DvB
DvB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
rhs
Код: plaintext
1.
2.
3.
mystructure lstr[]
...
lstr[ ll_ndx].var= '123'


mystructure lstr[]
long ll_ndx

for ll_ndx = 1 to UpperBound( lstr )
lstr[ ll_ndx ].var = <все что нужно>
next

Вы это имели ввиду?
...
Рейтинг: 0 / 0
22.12.2005, 06:59
    #33450821
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Скорее всего не это, т.к. тут получается массив структур и по нему-то ходить просто. Возможно, имеется в виду - пройти по элементам структуры, не указывая их поименно, т.е. что-то вроде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mystructure lstr

// Обычный доступ
lstr.i1 =  10 
lstr.i2 =  20 
...
lstr.i10 =  100 

//  Требуется
for i =  1  to  10 
  lstr.<элемент_i> =  10  * i
next

Но я сомневаюсь, что это возможно сделать.
...
Рейтинг: 0 / 0
22.12.2005, 10:07
    #33451016
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
AndynНо я сомневаюсь, что это возможно сделать.
Именно так как Вы написали - сделать можно. Взять скопировать структуру по какому-нибудь адресу и там ковыряться в линейном массиве (если поля структуры известны в design-time). Для произвольного же типа - действительно скорее всего не получится. Поддержка RTTI в PB более чем скромная.
...
Рейтинг: 0 / 0
22.12.2005, 11:40
    #33451377
DvB
DvB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Есть еще вариант. Правда, действует только если структура линейная,
т.е. не содержит внутри себя других структур или массивов.
Ее надо скопировать в DS (используя .Data), и в нем уже бродить
по номерам колонок.
...
Рейтинг: 0 / 0
27.12.2005, 20:39
    #33460570
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Локшин МаркДля произвольного же типа - действительно скорее всего не получится. Поддержка RTTI в PB более чем скромная.
Вот такой смешной объект есть :-)

Код: plaintext
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.
$PBExportHeader$nvo_sizeof.sru
$PBExportComments$Non visual user object that implements the SizeOf function present on other languages (C, Delphi, VB)
forward
global type nvo_sizeof from nonvisualobject
end type
end forward

global type nvo_sizeof from nonvisualobject autoinstantiate
end type

type variables
Private:
CONSTANT integer SIZE_BOOLEAN	=  1 	// Boolean
CONSTANT integer SIZE_CHAR	=  1 	// Char
CONSTANT integer SIZE_INT	=  2 	// Signed integer
CONSTANT integer SIZE_UINT	=  2 	// Unsigned integer
CONSTANT integer SIZE_LONG 	=  4 	// Signed Long
CONSTANT integer SIZE_ULONG 	=  4 	// Unsigned Long
CONSTANT integer SIZE_STRING 	=  4 	// Assume as string pointer

// Supported DataTypes
integer 	INTEGER
uint 	UINT
long 	LONG
ulong 	ULONG
char 	CHAR
string 	STRING
boolean 	BOOLEAN

end variables

forward prototypes
public function long sizeof (long data)
public function long sizeof (ulong data)
public function long sizeof (integer data)
public function long sizeof (uint data)
public function long sizeof (character data)
public function long sizeof (string data)
public function long sizeof (any data[])
public function long sizeof (boolean data)
public function long sizeof (powerobject data)
private function long sizeof (variabledefinition vardef[])
end prototypes

public function long sizeof (long data);Return(SIZE_LONG)
end function

public function long sizeof (ulong data);Return(SIZE_ULONG)
end function

public function long sizeof (integer data);Return(SIZE_INT)
end function

public function long sizeof (uint data);Return(SIZE_UINT)
end function

public function long sizeof (character data);Return(SIZE_CHAR)
end function

public function long sizeof (string data);Return(SIZE_STRING)
end function

public function long sizeof (any data[]);// Gives the dimension of an array
//
// Arguments: Data[]	=> Array to know the dimension
//
// Returns: Size of the array
//
// Notes: 
//		 1 ) Supports mixed type arrays (and variable sized strings within the array)
//		 2 ) DOESN'T support multi-dimension arrays;
long ll_Index, ll_Count, ll_Size =  0 

ll_Count = UpperBound(Data)

For ll_Index =  1  To ll_Count

	Choose Case ClassName(Data[ll_Index])
		Case "long"
			ll_Size += SizeOf(LONG)
		Case "unsignedlong","ulong"
			ll_Size += SizeOf(ULONG)
		Case "int","integer"
			ll_Size += SizeOf(INTEGER) 
		Case "uint","unsignedinteger","unsignedint"
			ll_Size += SizeOf(UINT)
		Case "char", "character"
			ll_Size += SizeOf(CHAR)
		Case "string"
			ll_Size += SizeOf(CHAR) * SizeOf(String(Data[ll_Index]))
		Case "boolean"
			ll_Size += SizeOf(BOOLEAN) 
	End Choose

Next

Return(ll_Size)
end function

public function long sizeof (boolean data);Return(SIZE_BOOLEAN)
end function

public function long sizeof (powerobject data);// This function calculates the size of a structure
//
// The structure can contain simple datatypes (long, integer, boolean), arrays or
// other structures within it
//
// Arguments: Data	=> Structure to know the size of..
//
// Returns: Size of the structure or - 1  if error
//
// Notes: 
//
//	 1 ) Cannot calculate the size of a structure with strings (variable size), for fixed
//  sized strings use a char array;
//  2 ) CAN calculate the size of multi-dimension arrays within the structures
ClassDefinition ClassDef
VariableDefinition VarDef[]

ClassDef = Data.ClassDefinition
VarDef	= ClassDef.VariableList

Return(SizeOf(VarDef))

end function

private function long sizeof (variabledefinition vardef[]);// Internal calculations for structure sizes
long ll_Index, ll_Count, ll_Size, ll_Array =  0 
ClassDefinition TypeInfo
VariableDefinition VarList[]
VariableCardinalityDefinition VarCarDef
ArrayBounds ArrBounds[]

ll_Count = Upperbound(VarDef)

For ll_Index =  2  To ll_Count
	
	VarCarDef = VarDef[ll_Index].Cardinality
	ArrBounds = VarCarDef.ArrayDefinition
	
	If Upperbound(ArrBounds) >  0  Then 
		ll_Array = ArrBounds[ 1 ].UpperBound 
	Else 
		ll_Array =  1 
	End If

	Choose Case VarDef[ll_Index].TypeInfo.DataTypeOf
		Case "long"
			ll_Size += SizeOf(LONG) * ll_Array
		Case "ulong","unsignedlong"
			ll_Size += SizeOf(ULONG) * ll_Array
		Case "int","integer"
			ll_Size += SizeOf(INTEGER) * ll_Array
		Case "uint","unsignedint","unsignedinteger"
			ll_Size += SizeOf(UINT) * ll_Array
		Case "char","character"
			ll_Size += SizeOf(CHAR)  * ll_Array
		Case "string"
			ll_Size += SizeOf(STRING) * ll_Array
		Case "structure"
			TypeInfo = VarDef[ll_Index].TypeInfo
			VarList = TypeInfo.VariableList
			ll_Size += SizeOf(VarList)
		Case Else
			MessageBox("SizeOf error","Type is not supported, possibly variable sized or object type!",StopSign!,Ok!)
			Return(- 1 )
	End Choose
	
Next

Return(ll_Size)
end function

on nvo_sizeof.create
TriggerEvent( this, "constructor" )
end on

on nvo_sizeof.destroy
TriggerEvent( this, "destructor" )
end on
...
Рейтинг: 0 / 0
28.12.2005, 10:03
    #33461066
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Филипп - просто великолепно
...
Рейтинг: 0 / 0
29.12.2005, 10:24
    #33463577
AnatolyRyabov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
Прошу, прощения, но как всё же по элементам структуры перемещатся в цикле?!
И потом - мало у кого встречаются структуры, не содержащие элементов типа String.
...
Рейтинг: 0 / 0
29.12.2005, 12:45
    #33464083
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Цикл по структуре
AnatolyRyabovПрошу, прощения, но как всё же по элементам структуры перемещатся в цикле?!
http://www.lokshinmark.narod.ru/files/winapi.zip объект uo_systemchoosecolordialog. Посмотрите как там сделано копирование. Со структурами - по аналогии.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Цикл по структуре / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]