Bosna i Hercegovina



Avko Offline
Super Moderator
Registrovan/a od: 28.05.2014-09:21
Komentari: 2,404


Subject: VBA Excel snimi matricu - VB6 ucitaj matricu
u VBA excelu snimio sam matricu na HD ovako
DownloadIzvorni kod (Visual Basic):
  1. type data
  2.         uzorak1 as string
  3.         uzorak2 as string
  4.         uzorak3 as string
  5.         uzorak4 as string
  6. end type
  7. podaci as data
  8.  
  9. dim SnimiMatrica (endRed,brojDanauMjesecu,brojUzoraka)
  10. for red=1 to endRed
  11.         for dana=1 to brojDanauMjesecu
  12.                 SnimiMatrica(red,dana,1)=podaci.uzorak1
  13.                 SnimiMatrica(red,dana,2)=podaci.uzorak2
  14.                 SnimiMatrica(red,dana,3)=podaci.uzorak3
  15.                 SnimiMatrica(red,dana,4)=podaci.uzorak4
  16.         next dana
  17. next red
  18.  
  19. open imeFajla For Binary Lock Read Write As #1
  20.         Put #1, , SnimiMatrica
  21. close #1

i onda sam iz VB6 pokusao ucitati tu matricu ovako:
DownloadIzvorni kod (Visual Basic):
  1. type data
  2.         str() as String
  3. end type
  4.  
  5. Dim UcitanaMatrica As data
  6.   Open "c:\imeFajla.txt" For Binary Lock Read Write  As #1
  7.     Get #1, , UcitanaMatrica
  8.   Close #1
  9.  
  10.   For red = LBound(UcitanaMatrica.str, 1) To UBound(UcitanaMatrica.str, 1)
  11.     For brojDanauMjesecu = LBound(UcitanaMatrica.str, 2) To UBound(UcitanaMatrica.str, 2)
  12.         For brojUzoraka = 1 to 4
  13.                 Debug.Print UcitanaMatrica.str(red, brojDanauMjesecu, brojUzoraka)
  14.         Next brojUzoraka
  15.     Next brojDanauMjesecu
  16.  Next red

no medutim javi mi gresku u liniji: Get #1, , UcitanaMatrica
znate li mozda u cemu je problem?
Newton laže! Lake padaju brže!
↑  ↓

zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,296


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
Kod mene ne javlja gresku tu nego u petlji sto je i logicno.
Nisi bas dobro poslozio kockice.
Kao prvo kada ovo radis moras na vrhu modula napisati
Optio explicit te moras dimenzionisati variable pa ces tako lakse naci gdje grijesis.
Ovako ti prodje pogresno pa onda neznas gdje si.

da pogledamo prvu proceduru za upis.
Da pretpostavim da to upisujes i exel kolona.
Napravio si tip variabli koja ima 3 varijable.

Ima negdje ovdje moj primjer koji sam tebi cini mi se pisao.
sada imas ovo
dim SnimiMatrica (endRed,brojDanauMjesecu,brojUzoraka)
Znaci 3d matrica
Zasto ti to treba neznam
for red=1 to endRed
for dana=1 to brojDanauMjesecu
SnimiMatrica(red,dana,1)=podaci.uzorak1
SnimiMatrica(red,dana,2)=podaci.uzorak2
SnimiMatrica(red,dana,3)=podaci.uzorak3
SnimiMatrica(red,dana,4)=podaci.uzorak4
Znaci imas tacno odredjen broj uzoraka ili ako nemas ti si ga fiksirao na 4 uzorka i nemoze vise na ovaj nacin
Znaci treca dimenzija matrice je 4 fiksno.

Dobro to i neka prodje.

e sad u drugoj proceduri imas tip variabli sa samo jednom variablom
Nigdje nemas 3d matricu u koju bi upisao podatke.
Pozdrav
Ovaj komentar je mijenjan 1 puta. zadnja izmjena 29.06.2015-16:25 od strane zxz. ↑  ↓

Avko Offline
Super Moderator
Registrovan/a od: 28.05.2014-09:21
Komentari: 2,404


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
znam radili smo sa tele.imenikom ali ovo je malo drugacije.
ne pisem option explicit jer nisam vise pocetnik pa se to podrazumjeva Smiling

program u vb6 trebao bi otvoriti file koji je snimljen kao matrica.
Za matricu znam samo da je 3D. Prva dimenzija nije poznata, druga je broj dana u tom mjesecu, a treca je fiksna to je 4 dakle matrica izgleda ovako:
matrica(1 to ?, 1 to brojDanauMjesecu,1 to 4)
matricu sam iz Excela snimio sa VBA kodom i dao ime yyyymm.txt tako da mi je iz imena fajla poznato za koji je mjesec taj fajl i tako da mogu izracunati brojDanauMjesecu za taj fajl
brojDana = DateSerial(Year(startDatum), Month(startDatum) + 1, 1) - DateSerial(Year(startDatum), Month(startDatum), 1)
dakle i to nije problem.
Ono sto mene zanima je:
ucitati fajl i staviti podatke u Array(matricu).
trazio po interneru. Ispobavo sa LOf Eof filelen i sta ti ja znam cime svime ali nisam uspio ugurati podatke iz fajla u matricu.
eto to je to, pa ako treba dodatno pojasnjenje problema napisacu a sada idem jos malo isprobavati i pretrazivati internet.
Newton laže! Lake padaju brže!
↑  ↓

zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,296


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
Citat:
ne pisem option explicit jer nisam vise pocetnik pa se to podrazumjeva
Tesko je raditi kada nisu variable dimenzionisane.
Meni je bar tesko i to radim tako samo ako je neki manji kod.
dim SnimiMatrica (endRed,brojDanauMjesecu,brojUzoraka)

Ti si dimenzionisao var snimiMatrica ali nisi naveo tiip i eto ja sad tebe pitam koji je tip ove tvoje variable koja je smjestena u memoriju a broj variabli bi morali graficki nacrtati kako izgleda da bi razumjeli.
Ne zaboravi da radis sa binarnim zapisom.

Pri otvaranju datoteke si dimenzionisao samo jednu var str i u nju trpas sve te podatke i sad i ovdje ako mozes pretstaviti graficki kako su ti podaci slozeni.
O tome ja govorim.
Gore imas 3d matricu zapisanu binarno a ovdje imas niz.
Kako te podatke iscitati koji je koji.
Pozdrav
↑  ↓

Avko Offline
Super Moderator
Registrovan/a od: 28.05.2014-09:21
Komentari: 2,404


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
DownloadIzvorni kod (Visual Basic):
  1. option Explicit
  2.  
  3. private type data
  4.       uzorak1 as string
  5.       uzorak2 as string
  6.       uzorak3 as integer
  7.       uzorak4 as integer
  8. end Type
  9.  
  10. Private Sub Command1_Click()
  11.     Open "c:\imeFajla" For Binary Access Read As #1
  12.         Dim podaci As data
  13.         Do While Not EOF(1)
  14.                Get #1, , podaci
  15.                With podaci
  16.                        Debug.Print .uzorak1
  17.                        Debug.Print .uzorak2
  18.                        Debug.Print .uzorak3
  19.                        Debug.Print .uzorak4
  20.               End With
  21.         Loop
  22.     Close #1
  23.    
  24. End Sub

u imediate prozoru vidim da mi nisu svi podaci ucitani. Pogledam edit fajla i vidim da je snimljeno sve iz Excela, dakle datoteka je u redu.
mozda bi trebao zaboraviti na snimanje u binary modu, mozda bi trebao uzeti klasicno Input-Output, ali mi je onda fajl puno veci.
uglavnom, ovo meni ne radi, ha jos cu malo istrazivati pa ako ne uspijem vraticu se nazad na klasicno snimanje fajla.
Newton laže! Lake padaju brže!
↑  ↓

zxz Offline
Administrator
Registrovan/a od: 03.02.2009-16:22
Komentari: 9,296


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
Hehe sad je malo bolje ali mozes ti to jos bolje samo da si nacrtao sebi matricu graficki.
dim SnimiMatrica (endRed,brojDanauMjesecu,brojUzoraka)
Gdje ti se izgubila treca dimenzija matrice ili bolje eci prva.
Nevidim.
Pozdrav
↑  ↓

Avko Offline
Super Moderator
Registrovan/a od: 28.05.2014-09:21
Komentari: 2,404


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
da, imam problema sa citanjem 3d matrice. Nakon instaliranja kids 3d cad freeware programa odustao sam od crtanja 3d matrice. Odustao sam i iz painta nacrtati jer su linije nesimetricne i ruzno izgleda pa cu to prikazati ovako:

za lokaciju 1, 1.dan u mjesecu
a(1,1,1)
a(1,1,2)
a(1,1,3)
a(1,1,4)

za lokaciju 1, 2.dan u mjesecu
a(1,2,1)
a(1,2,2)
a(1,2,3)
a(1,2,4)

i tako do zadnjeg dana u mjesecu i prvu lokaciju uzimanja uzorka
a(1,31,1)
a(1,31,2)
a(1,31,3)
a(1,31,4)

sa druge lokacije za iste dane u mjesecu uzimamo takoder 4 uzorka
a(2,1,1)
a(2,1,2)
a(2,1,3)
a(2,1,4)
...
a(2,31,1)
a(2,31,2)
a(2,31,3)
a(2,31,4)

i tako idemo do zadnje lokacije , a broj lokacija sa kojih uzimamo uzorke nije poznata. Nekad 200, a nekad i do 450. varira od mjeseca do mjeseca. Poznato je broj dana u mjesecu i broj uzoraka koji se uzima. Broj lokacija varira.
...
a(n,31,1)
a(n,31,2)
a(n,31,3)
a(n,31,4)

svi podaci su u excel tablici. Snimio VBA kodom gore navedenim. Sada bi u vb6 napravio nekakvu malu aplikaciju sa grid skalom, sort, prikaz itd ali evo zapeo na samom pocetku.
Znaci nedostaje prva dimenzija, broj lokacija. Nju bi trebao ubaciti u kod kod ucitavanja binary fajla. Dobro profesore. Idem ja to onda guglati.

ja mislio da se to moze jednostavno ovako

PUT #1,,array
i onda kad mi treba ucitati
GET #1,,array

ali to nemoze tako
Newton laže! Lake padaju brže!
Ovaj komentar je mijenjan 1 puta. zadnja izmjena 02.07.2015-12:32 od strane Avko. ↑  ↓

Avko Offline
Super Moderator
Registrovan/a od: 28.05.2014-09:21
Komentari: 2,404


Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
hehe
za sada otkrio jednu gresku u vb6

u vb6
DownloadIzvorni kod (Visual Basic):
  1. type data
  2.      uzorak1 as string
  3.      uzorak3 as string
  4.      uzorak2 as string
  5.      uzorak4 as string
  6. end type
zamijenio mjesta uzorak2 i uzorak3 pa mi nije dobro app u vb6 ucitavala podatke

e sad ima jos jedan problem a to moram rijesiti u VBA Excel. Snimi mi u fajl zadnji red prazan pa mi u VB6 ucita posljedni red prazno. Znaci moram u VBA rijesiti tako da kada dode do kraja matrice zadnji red ne snimi u file.
Prode for next petlju i onda snimi jos jedan red. To cu pogledati sutra.
hehehe
Newton laže! Lake padaju brže!
↑  ↓

Avko Offline
Super Moderator
Registrovan/a od: 28.05.2014-09:21
Komentari: 2,404


Ocjena: Ocjena:100 Subject: Re: VBA Excel snimi matricu - VB6 ucitaj matricu
problem od 29.6.2015
danas 5.8.2015
eto koliko mi je trebalo.

snimanje 3D matrice iz Excela i citanje iz VB6
"open 3D array - read 3D array"

osnovni koncept:
DownloadIzvorni kod (Visual Basic):
  1. ' Save
  2. Open "fajl.dat" For Binary Access Write Lock Write As #1
  3.         Put #1, , velicinaMatrice
  4.         Put #1, , matrica()
  5. Close #1
  6.  
  7. 'Read
  8. Open "fajl.dat" For Binary Access Read Shared As #1
  9.         Get #1, , velicinaMatrice
  10.         ReDim matrica(1 To velicinaMatrice)
  11.         Get #1, , matrica()
  12. Close #1

imamo 3D matricu, tipa matrica(x,y,z) u Excelu. Koristimo VBA kod:
bitno je napomenuti da se matrice mijenjaju po velicini i nisu uvijek iste

DownloadIzvorni kod (Visual Basic):
  1. private sub test()
  2.         Dim imeFile As String
  3.         Dim FF As Integer
  4.         Dim folderPath As String
  5.         Dim x as Integer
  6.         Dim y as Integer
  7.         Dim z as Integer
  8.         Dim matrica() as String
  9.        
  10.         ' napunimo matricu nekim podacima
  11.         'x=4:y=3:z=10
  12.         'Redim matrica(1 to x,1 to y,1 to z)
  13.         'matrica(1,1,1)="nesto"
  14.         'matrica(1,1,2)="nesto drugo"
  15.         'itd do
  16.         'matrica(4,3,10)="zadnji podataka"
  17.  
  18.         'snimanje matrice
  19.        folderPath = Application.ActiveWorkbook.Path
  20.         FF = FreeFile()
  21.         imeFile = folderPath & "/matrica.bin"
  22.        
  23.         Open imeFile For Binary Access Write As #FF
  24.             Put #FF, , x'velicina prvog polja
  25.            Put #FF, , y'velicina drugog polja
  26.             Put #FF, , z'velicina treceg polja
  27.            Put #FF, , matrica()
  28.         Close #FF
  29. end sub

sada napisemo VB6 kod za ucitati tu matricu

DownloadIzvorni kod (Visual Basic):
  1. Public Sub Command1_Click()
  2.    
  3.     Dim imeFile As String
  4.     imeFile = App.Path & "\matrica.bin"
  5.        
  6.     Dim x As Integer
  7.     Dim y As Integer
  8.     Dim z as Integer
  9.     Dim matrica() As String
  10.  
  11.     Dim junkInt As Integer'ovo je broj i vjerojatno pokazuje velicinu sljedeceg podatka
  12.                           'moramo ga ucitati ali nam nije bitan
  13.    
  14.     Open file For Binary Access Read Shared As #1
  15.         Get #1, , junkInt
  16.         Get #1, , x
  17.         Get #1, , junkInt
  18.         Get #1, , y
  19.         Get #1, ,junkInt
  20.         Get #1, ,z
  21.         ReDim matrica(1 To x, 1 To y, 1 To z)
  22.         Get #1, , matrica()
  23.     Close #1
  24.  
  25.     ' mozemo provjeriti velicinu matrice    
  26.    MsgBox UBound(matrica, 1) & vbNewLine & UBound(matrica, 2) & vbNewLine & UBound(matrica, 3)
  27.  
  28.     'ispis matrice
  29.    Dim f as integer
  30.     Dim e as Integer
  31.     Dim g as Integer
  32.  
  33.     For f = 1 To x
  34.         For e = 1 To y
  35.                 for g=1 to z
  36.                         debug.print matrica(f,e,g)
  37.                 next g
  38.         next e
  39.     next f
  40.    
  41. End Sub

eto resolved
zakljucano
fertig
osim ako nema komentara ili neko da zna na jednostavniji nacin
Newton laže! Lake padaju brže!
↑  ↓

 Podijeli  Dodaj odgovor Stranice (1): 1


All times are GMT +01:00. Current time: 24.05.2017-20:38.