Muutujate edasiandmine VB-s - Printerisõbralik versioon +- Elektroonikafoorum.com (https://elektroonikafoorum.com) +-- Foorum: Arutelud (https://elektroonikafoorum.com/forum-3.html) +--- Foorum: Programmeerimine (https://elektroonikafoorum.com/forum-5.html) +--- Teema: Muutujate edasiandmine VB-s (/thread-343.html) Lehed:
1
2
|
Muutujate edasiandmine VB-s - felch - 27-11-2011 Soovin üht teatud koodijuppi korduvalt kasutada. Jup loeb ini-failist muutujad ja kopeerib nad vastavasse maatriksisse. Jupp eraldi töötab aga funktsioonina välja kutsudes ei oska kuidagi talle salvestuskoha nime edasi anda. Väljakutse ( siin tahan, et jubin salvestaks töö tulemused maatriksisse "AnaloogKonf" Kood: Ret = KopeeriIOKonfMuutujasse(AnaloogKonf, "AnaloogSisend 1") Kas maatriksi nime üldse annab nii edastada? Kood: Private Function KopeeriIOKonfMuutujasse(KonfiBlokiNimi, IONimi) RE: Muutujate edasiandmine VB-s - Elektrik - 03-12-2011 Tere felch. Oled lahenduse leidnud juba? Kui ei, siis prooviks aidata. Kuidas see massiiv ehk maatriks Sul deklareeritud on? Kas midagi sellist? Kood: Dim KonfiBlokiNimi(26) as Integer Ma eeldan et täisarv, sest muudad ju INI'st loetud väärtused "numbriteks", Val'iga. Kui nii, siis funktsiooni KopeeriIOKonfMuutujasse päis peaks olema selline: Kood: Private Function KopeeriIOKonfMuutujasse(KonfiBlokiNimi() As Integer, IONimi) Nii peaks asi töötama Sul. EDIT: lihtsalt infoks: Oletame, et teed mingi massiivi: Kood: Dim AnaloogKonf(26) As Integer Kood: AnaloogKonf(1) = 77 siis nüüd Sinu KopeeriIOKonfMuutujasse funktsioon peaks selle väärtusega nüüd tuttav olema. Minu lihtne "debug" koodijupp, mis aitab selles veenduda: Kood: MsgBox Str(KonfiBlokiNimi(1)) KopeeriIOKonfMuutujasse funktsiooni panin selle. Sina muidugi loed andmed INI failist. Mul suvaarvud lihtsalt näiteks. RE: Muutujate edasiandmine VB-s - felch - 03-12-2011 Tänks, sain tööle küll. Funktsiooni päis: Kood: Private Function KopeeriIOKonfMuutujasse(KonfiBlokiNimi, IONimi As String) Kood: Ret = KopeeriIOKonfMuutujasse(AnaloogKonf, ("AnaloogSisend" + Str(n))) RE: Muutujate edasiandmine VB-s - Elektrik - 04-12-2011 Hmm, kui suur INI on siis? KB? MB? Ma igapäev VB'd ei näpi. Ma rohkem Delphi'ga mässan. Aga Delphis nagu väga aeglane see küll pole. Rääkimata "progressi" kuvamisest. Sellepärast hakkasingi mõtlema, et huvitav, kui suur Su ini fail siis on, et nii aeglane. RE: Muutujate edasiandmine VB-s - KaruTEC - 04-12-2011 Vastan väga laiahaardeliselt kuna puudub kogemus VBga. Kui ini lugemine võtab eoone, siis proovi asi läbi profileri lasta. Kuna praegu on arvutid nii krdi kiired, siis võib toimuda midagi stiilis "ava fail - loe filecache sisse 10MB - võta failist bait - pane kinni - flushi cache" ja nii iga baidi kohta. Või analoogne tegevus. Ma olen paljusid programme debugida aidanud, mis on "peaaegu kiired" aga "see asi jupsib natuke", vahel leiab jubedat bloati, kasutatakse mingit legacy funktsiooni, stiilis Win7 alla wrapitud XP funktsioon mis varem oli XP alla wrapitud NT funktsioon mis varem oli NT alla wrapitud OS2 kompatiiblusega WIn 3.11 funktsioon, mis varem oli 3.11 alla wrapitud DOS funktsioon mis omakorda tehti kunagi workaroundina CPM süsteemist. RE: Muutujate edasiandmine VB-s - felch - 04-12-2011 Ini fail on suhteliselt pikk: 105 kB. Teksti on palju. Et oleks inimloetav. Faili lugemiseks kasutan Kernel32 lib'i funktsioone. Ega ta nüüd nii meeletult aeglane ka ole aga kokku läheb faili parsimisele kuskil 5+ sekundit. Minu meelest võiks kiirem olla. Mismoodi lib tehtud on, pole aimugi. Vast on kiirem kui ise funktsiooni kirjutades. Panin faili laiendiks .txt kuna foorum teda muidu ei seedinud. AQUA5.txt (Suurus: 104.46 KB / Tõmbamised: 584) RE: Muutujate edasiandmine VB-s - KaruTEC - 04-12-2011 Sellise asja parsimine võiks ideaalis võtta 0.1 sekundit. Äkki loed failist ridahaaval ? Tõmba terve fail mälupuhvrisse ? RE: Muutujate edasiandmine VB-s - andrei - 04-12-2011 (04-12-2011, 11:39 AM)KaruTEC Kirjutas: Sellise asja parsimine võiks ideaalis võtta 0.1 sekundit.Mõistlik, sest see 'VBGetPrivateProfileString("IONimi", "KoefB", FileName$)" paistab iga kord faili uuesti läbi lugevat Üks variant on lugeda fail alguses paisktabelitesse (hashtable) või sõnastikesse (dictionary), ja pärast teha abifunktsioon 'MyGetProfileString', mille kasutamine analoogne funktsioonile 'VBGetPrivateProfileString', ainult et faili asemel kasutab mällu loetud andmeid. Iseenesest oleksin selle variandi ka kohe valmis visanud, aga mul pole VB6-te, mida felch paistab kasutavat. Sõber Google aitab ehk järjele, näiteks siit: http://www.vbforums.com/showthread.php?t=431190 või siit: http://www.vbaccelerator.com/home/VB/code/Libraries/Registry_and_Ini_Files/Easy_Ini_File_Access/article.asp RE: Muutujate edasiandmine VB-s - A.R. - 04-12-2011 Kirjutasin Lcc-32 all väikese testi. Avan faili, loen ridade kaupa, seal vahel on veel pisianalüüs et mis on rea juhtstring. (Näidiseks) salvestan loetu 200 kb faili. _____________________________________________ char Fail[200000]; Fail[0]=0; infile = fopen( iniFail,"rt" ); if( infile == NULL ){ wsprintf(txt, "fopen: Algseade fail %s ei avane\n\r", iniFail); MessageBox(NULL,txt, "Veateade", MB_OK); }else{ while( (p=fgets(txt, 70, infile))){ // if(*p==';') continue; p1=p; // while(*p1!=':')p1++; // *p1++=0; // while(*p1==' ') p1++; if(!strcmp(txt, "TEST")){ test=1; } if(!strcmp(txt, "N")){ strcpy(Null, p1); Null[strlen(Null)-1]=0; } if(!strcmp(txt, "NR")){ nr=(int)strtol(p1,&p1,10); } strcpy(Fail+strlen(Fail), p1); } fclose(infile); } } ________________________________ Ja kõik see lugemine võtab alla sekundi. (Programm sek osasid ei lugenud.) Kasutusel on arvuti 1,83 GHz Win-XP. Selle C teksti pakkus translaator ise välja, mina lisasin ainult lugemise, aja mõõtmise ja näitamise osa. Copyd ühest vanemast asjast. Kui kahtled-kõhkled, (võin saata) saadan kogu programmi exe ja/või C ja ka lingid vabavaralisle LCC-le. Ühe USA (üli) koolpoisi tehtud. Proovi. Ei kahetse. Usu vana inimest. Basic on tore, kirjutasime selles 85. raamatu küljenduse programmi aga ...... Kui tahad, saad oma programmist kasvõi DOS versiooni või siis midagi muud uuemat. RE: Muutujate edasiandmine VB-s - Elektrik - 04-12-2011 Üks variant on kirjutada andmed registrisse. Aga jah, kui igale inimesele kes Su softi kasutab, peavad andmed nähtavad ja loetavad olema, siis läheb raskeks. Üks variant on teha eraldi programmijupp, mis kuvab need andmed registrist mingisse tabelisse vms ja siis kasutaja saab neid redigeerida ja salvestada. Ega enne kiiremaks ei lähe, kuni Get(Set)PrivateProfileString'ist vabaned. XML' ei tasu ka ära. Pigem proovi Windowsi Registrit. |