класс Array
|
|
кП | Дата: Воскресенье, 16.02.2020, 10:52 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| вероятно будет полезно блин как тут архивы вставлять ?
ссылка Array
Прикрепления:
ar.zip
(16.4 Kb)
Сообщение отредактировал кП - Воскресенье, 16.02.2020, 10:59 |
|
| |
haav | Дата: Воскресенье, 16.02.2020, 14:13 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Небольшой пример бы не помешал.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
кП | Дата: Воскресенье, 16.02.2020, 14:30 | Сообщение # 3 |
Рядовой
Группа: Пользователи
Сообщений: 2
Статус: Offline
| в readmi справка по методам с пояснениями пример:
#include "ar\Array.bi"
sub ssub() ? "SUB" end sub
dim ar as Array ar[0] = "qwerty" ar[1] = 1233 ar[2] = @ssub ar.toString ar.sort(16) ar.printall
dim t as Array t.name_ = "T"
t[0] = ar t.printall print t[0][0]
sleepДобавлено (16.02.2020, 14:43) --------------------------------------------- пример:
#include "ar\Array.bi"
sub ssub() ? "SUB" end sub
function fun(s as Array)as integer ? "FUNCTION" return 1 end function
dim iptr as integer ptr = @fun
dim ar as Array ar[0] = @ssub ar[1] = @fun ar[2] = @iptr
ar.printall
dim su as sub() = ar[0] dim fu as function(as Array)as iteger = ar[1] dim ptrr as integer ptr = ar[2]
sleep Добавлено (19.02.2020, 13:23) --------------------------------------------- Просьба, если встретите ошибки отписаться в личку. Ну и предложения\пожелания по коду, тоже в личку.
|
|
| |
ntvgjhfnj | Дата: Пятница, 04.11.2022, 10:06 | Сообщение # 4 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| Не могу понять в чём причина вылета программы?
Код /' array.bi '/
#Ifndef __ARRAY__ #Define __ARRAY__ ' Enum atype Undefined = 0
aString = 1 aPtr End Enum
Dim Shared As UInteger num =-1 ' íóìåðàöèÿ ìàññèâîâ
Type Array Declare Constructor() Declare Operator []( index_ As Integer ) ByRef As Array Declare Operator Let( rhs As String ) Declare Operator Let( rhs As Any ptr ) Declare Operator Cast() As String Declare Operator Cast() As Sub() ad(Any)As String ' td(Any)As byte As UInteger i,ii ' èíäåêñû ìàññèâà End Type
Constructor Array() Static As UInteger count count = num count += 1 num = count ReDim ad(0) As String reDim td(0) As Byte End Constructor
Operator Array.[]( index_ As Integer ) ByRef As Array 'switch = true If index_ <= 0 Then index_ = 0
'If triger Then ii = index : triger = false Else i = index_ : triger = true i = index_
If index_ >= UBound(ad) Then ReDim Preserve ad(index_ +1) As String ReDim Preserve td(index_ +1) As byte EndIf
'If typeData(index_) = aArray Or typeData(index_) = aPointer Then ' Return *(CPtr( Array Ptr, cInt(*ad(index_)))) ' 'Return toArray(ad(index_)) 'Else Return This 'EndIf End Operator
Operator Array.Let( rhs As String ) If @This <> @rhs Then ad(i) = rhs td(i) = aString ? "Let ";i,ad(i) EndIf End Operator
Operator Array.Let( rhs As Any Ptr ) If @This <> @rhs Then ad(i) = Str(@rhs) td(i) = aPtr ? "Let ";i,ad(i) EndIf End Operator
Operator Array.Cast() As String If td(i) = aArray Then ? "Cast 0 ";i,"AD" Return "AD" Else ? "Cast 1 ";i,ad(i) Return ad(i) EndIf End Operator
Operator Array.Cast() As Sub() ? "Cast 1 ";i,ad(i) Return CPtr( Sub() , cast( Integer , ad(i))) End Operator
#EndIf __ARRAY__
#Ifdef __FB_MAIN__ ' Dim As Array a a[0] = "wer" ? a[0]
Sub su() ? "SUB" End Sub
a[1] = @su Dim s As Sub() = a[1] ? a[1]
s() ' здесь зависает программа sleep #endif
Причём в этом коде всё работает:
Код Sub cm( ) ? "SUB" End Sub
? @cm
Dim s(3) As String s(0) = Str(@cm) ? s(0)
Dim su As Sub() = CPtr( Sub() , cast( Integer , s(0) )) ? @su : ?
su()
Sleep
polopok
|
|
| |
haav | Дата: Пятница, 04.11.2022, 14:35 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| @ntvgjhfnj
Что у вас вообще такое? У меня это даже не компилируется.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ntvgjhfnj | Дата: Пятница, 04.11.2022, 20:51 | Сообщение # 6 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| в том то и дело не компилируется , а должно.
s() ' здесь зависает программа - !!! эту строку закоментировать, будет компелироваться .
polopok
|
|
| |
haav | Дата: Пятница, 04.11.2022, 21:14 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Цитата ntvgjhfnj ( ) в том то и дело не компилируется , а должно.
s() ' здесь зависает программа - !!! эту строку закоментировать, будет компелироваться .
Дело не в этой строчке , тут другие ошибки. Пример не полный.
Цитата FBTEMP.bas(82) error 42: Variable not declared, aArray in 'If td(i) = aArray Then' FBTEMP.bas(82) error 3: Expected End-of-Line, found 'aArray' in 'If td(i) = aArray Then' FBTEMP.bas(85) error 117: ELSE without IF, found 'Else' in 'Else' FBTEMP.bas(88) error 129: Expected 'END OPERATOR', found 'EndIf' in 'EndIf'
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ntvgjhfnj | Дата: Пятница, 04.11.2022, 21:17 | Сообщение # 8 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| Вот рабочий вариант сделал ( ! не все методы проверил ) ссылка https://transfiles.ru/i60nm
Dim su As Sub() = @b[1] решение выделил жирным , в верхнем примере такой подход не проходит ( правда там не String Ptr ) su()Добавлено (04.11.2022, 21:25) ---------------------------------------------
Цитата haav ( ) Дело не в этой строчке , тут другие ошибки. Пример не полный.
Enum atype Undefined = 0 aArray это надо добавить aString = 1 aPtr End Enum
's() ' здесь зависает программа Это закоментировать ( сама проблемма )
polopok
Сообщение отредактировал ntvgjhfnj - Пятница, 04.11.2022, 21:19 |
|
| |
haav | Дата: Суббота, 05.11.2022, 05:46 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Код Operator Array.Let( rhs As Any Ptr ) If @This <> @rhs Then ad(i) = Str(@rhs) ' <- здесь что присваивается? Убери собаку и будет работать. td(i) = aPtr ? "Let ";i,ad(i) EndIf End Operator
Вникать в код полностью вообще не хочется , но текущую ошибку я нашел.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ntvgjhfnj | Дата: Суббота, 05.11.2022, 06:53 | Сообщение # 10 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| Точно, исправил , помогло, заработало. благодарю ! ( видать сам себя запутал )
/К сожалению так до конца работу с указателями не понимаю , часто путаюсь./
P.S. Рекомендую добавить ='[!'],'],,,0 в группу [Block] в файле FbEdit.ini . Это сворачивает лишний код , но исполняет. Да и структуру поддерживает ( правда иногда лагает при разворачивании, но исправляется автоформатом )
polopok
|
|
| |
haav | Дата: Суббота, 05.11.2022, 07:01 | Сообщение # 11 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Цитата Рекомендую добавить ='[!'],'],,,0 в группу [Block] в файле FbEdit.ini
Я уже давно не пользуюсь FbEdit по 2 причинам:
1) Большую часть времени пишу в линуксе , даже если программа для линукса и винды 2) Задолбали вот такие штуки: ' íóìåðàöèÿ ìàññèâîâ
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
ntvgjhfnj | Дата: Суббота, 05.11.2022, 15:39 | Сообщение # 12 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| Цитата haav ( ) 1) Большую часть времени пишу в линуксе , даже если программа для линукса и винды
А я вот ни как не осмелюсь, просто много барахла заточено под Винду FbEdit !? - просто привык
polopok
|
|
| |
zamabuvaraeu | Дата: Понедельник, 07.11.2022, 18:39 | Сообщение # 13 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| FbEdit — красиво, но как только начинается применение на практике, оказывается неюзабельным. К тому же оно больше десяти лет назад не развивается.
В настоящее время использую Visual Studio Code, всем доволен. Там даже отлаживать можно мышкой. А чтобы посмотреть на скорую руку — это Far Manager или Notepad++.
|
|
| |
ntvgjhfnj | Дата: Вторник, 08.11.2022, 19:26 | Сообщение # 14 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| подкиньте примеры с использованием макроса в типе , если такое возможно !
Код type p declare sub d() #macro hit() 'вот тутова #endmacro end type
sub p.d() end sub
p.hit() что-то вроде этого
dim as p tt tt.hit() чтоб вызов макроса был как процедуры
Добавлено (09.11.2022, 11:42) --------------------------------------------- ссылка https://transfiles.ru/b6uq7 переработанный код с примерами
Добавлено (14.11.2022, 00:04) --------------------------------------------- Ссылка https://transfiles.ru/qatxk обновлённый исправленный. Примеры в самом низу Array.bi раскоментировать и ... .Читать readmy . Сортировку не делал кому надо сам допилит, думаю. Всем респект!
Добавлено (14.11.2022, 20:43) --------------------------------------------- Забыл добавить в тип:
Код Type Array extends object
. . .
'[ Other Declare function notnone () As Array
в методы:
Код '[ Other function Array.notnone() As Array Dim at As Array If This.lenght = 1 Then If this.td(0)= aUndefined Then ReDim ad(0) As string ReDim td(0) As byte EndIf ElseIf This.lenght > 1 Then Dim j As Integer, k As Integer = 0 : num-=1 For j = 0 To This.lenght - 1 If this.td(j) <> aUndefined Then at[k] = This[j] : k+=1 EndIf Next This = at Else ReDim ad(0) As string ReDim td(0) As byte EndIf Return at End Function
В Readmy : Notnone - удаляет из данного массива все неопределённые Undefined элементы и возвращает как новый массив. Arr = Ar.Notnone
polopok
Сообщение отредактировал ntvgjhfnj - Понедельник, 14.11.2022, 20:44 |
|
| |
ntvgjhfnj | Дата: Пятница, 09.12.2022, 16:20 | Сообщение # 15 |
Лейтенант
Группа: Проверенные
Сообщений: 61
Статус: Offline
| Всё в одном файле Array.bi и примеры в нём . Последняя редакция на момент :
polopok
Сообщение отредактировал ntvgjhfnj - Пятница, 09.12.2022, 16:21 |
|
| |