powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Цикл по структуре
12 сообщений из 12, страница 1 из 1
Цикл по структуре
    #33447286
uuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите плиз, можно ли в цикле ходить по структуре, если можно то как?:) Спасибо.
...
Рейтинг: 0 / 0
Цикл по структуре
    #33447379
DvB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DvB
Гость
Поясните плиз, если по структуре, то по какой? Они, структуры разные бывают...
...
Рейтинг: 0 / 0
Цикл по структуре
    #33448427
alexis glinski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uuserПодскажите плиз, можно ли в цикле ходить по структуре, если можно то как?:) Спасибо.
а зачем ???
...
Рейтинг: 0 / 0
Цикл по структуре
    #33449245
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Код: plaintext
1.
2.
3.
mystructure lstr[]
...
lstr[ ll_ndx].var= '123'
...
Рейтинг: 0 / 0
Цикл по структуре
    #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
Цикл по структуре
    #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
Цикл по структуре
    #33451016
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndynНо я сомневаюсь, что это возможно сделать.
Именно так как Вы написали - сделать можно. Взять скопировать структуру по какому-нибудь адресу и там ковыряться в линейном массиве (если поля структуры известны в design-time). Для произвольного же типа - действительно скорее всего не получится. Поддержка RTTI в PB более чем скромная.
...
Рейтинг: 0 / 0
Цикл по структуре
    #33451377
DvB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DvB
Гость
Есть еще вариант. Правда, действует только если структура линейная,
т.е. не содержит внутри себя других структур или массивов.
Ее надо скопировать в DS (используя .Data), и в нем уже бродить
по номерам колонок.
...
Рейтинг: 0 / 0
Цикл по структуре
    #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
Цикл по структуре
    #33461066
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп - просто великолепно
...
Рейтинг: 0 / 0
Цикл по структуре
    #33463577
AnatolyRyabov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу, прощения, но как всё же по элементам структуры перемещатся в цикле?!
И потом - мало у кого встречаются структуры, не содержащие элементов типа String.
...
Рейтинг: 0 / 0
Цикл по структуре
    #33464083
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnatolyRyabovПрошу, прощения, но как всё же по элементам структуры перемещатся в цикле?!
http://www.lokshinmark.narod.ru/files/winapi.zip объект uo_systemchoosecolordialog. Посмотрите как там сделано копирование. Со структурами - по аналогии.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Цикл по структуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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