Tässä on samantapaiset ini-käsittelyrutiinit, kuin Windowsissakin käytetään, mutta niitä on vähän yksinkertaistettu (parametrejä vähemmän). Luulisin että noita on helppo käyttää.
DECLARE SUB SETINI (initiedosto$, osio$, valinta$, sisalto$) DECLARE SUB GETINI (initiedosto$, osio$, valinta$, sisalto$) 'INI-TIEDOSTOJEN KÄSITTELY RUTIINIT by: JSBasic 2003 ' 'HUOM. Ini-tiedosto (tässä "koeini.ini") pitää ensin luoda, muuten 'tulee "file not found" virhe. Jos joku tietää, miten q(uick)basicissa 'katsotaan että löytyykö jotakin tiedostoa ja jos ei, se luotaisiin tyhjänä, 'voi kommentoida tuota asiaa! ' 'Ohjelmassa käytetään seuraavia nimiä ini-tiedoston osille: ' '[OSIO] 'VALINTA=SISÄLTÖ ' 'Tämä esimerkki tallentaa ja lukee seuraavan inin (koeini.ini): '[NIMI] 'ETUNIMI=Matti 'SUKUNIMI=Meikäläinen CLS SETINI "koeini", "nimi", "etunimi", "Matti" SETINI "koeini", "nimi", "sukunimi", "Meikäläinen" GETINI "koeini", "nimi", "etunimi", etunimi$ GETINI "koeini", "nimi", "sukunimi", sukunimi$ PRINT "Käyttäjän nimi: "; etunimi$; " "; sukunimi$ SUB GETINI (initiedosto$, osio$, valinta$, sisalto$) 'Funktio hakee jonkin tiedon windowsin ini-tiedostosta osio$ = "[" + UCASE$(osio$) + "]" valinta$ = UCASE$(valinta$) + "=" vpituus = LEN(valinta$) OPEN initiedosto$ + ".ini" FOR INPUT AS 50 WHILE NOT EOF(50) 'Luetaan ini-tiedosto rivi kerrallaan. Poistetaan turhat välilyönnit 'reunoilta. Rivi alkaa "[" merkillä se on alueen nimi ja se muistetaan: LINE INPUT #50, haettuini$: haettuini$ = RTRIM$(LTRIM$(haettuini$)) IF MID$(haettuini$, 1, 1) = "[" THEN tamaosio$ = UCASE$(haettuini$) 'Jos oikea valinta löytyy ja alue on oikea, otetaan arvo "=" merkin 'oikealta puolelta: IF MID$(UCASE$(haettuini$), 1, vpituus) = valinta$ AND tamaosio$ = osio$ THEN onkohta = INSTR(haettuini$, "=") sisalto$ = MID$(haettuini$, onkohta + 1, LEN(haettuini$) - onkohta) END IF WEND CLOSE 50 END SUB SUB SETINI (initiedosto$, osio$, valinta$, sisalto$) 'Funktio vie jonkin tiedon windowsin ini-tiedostoon valinta$ = UCASE$(valinta$) + "=" vpituus = LEN(valinta$) osio$ = "[" + UCASE$(osio$) + "]" 'Luodaan .tmp tiedosto johon vanha .ini tiedosto tullaan kopioimaan muuten 'samanlaisena, mutta uusi sisältö lisättynä/muokattuna. OPEN initiedosto$ + ".ini" FOR INPUT AS 50 OPEN initiedosto$ + ".tmp" FOR OUTPUT AS 51 WHILE NOT EOF(50) 'Luetaan ini-tiedosto rivi kerrallaan. Poistetaan turhat välilyönnit 'reunoilta. Jos rivi alkaa "[" merkillä, se on alueen nimi ja se 'muistetaan: LINE INPUT #50, haettuini$: haettuini$ = RTRIM$(LTRIM$(haettuini$)) IF MID$(haettuini$, 1, 1) = "[" THEN 'Jos alueen on mennyt ohi eikä siitä ole löydetty aikaisempaa valintaa '(eli m on vielä 0), lisätään uusi valinta sisältöineen: IF tamaosio$ = osio$ AND m = 0 THEN PRINT #51, valinta$; sisalto$: m = 1 tamaosio$ = UCASE$(haettuini$) END IF 'Jos oikea valinta löytyy ja alue on oikea, poistetaan vanha sisältö ja 'lisätään uusi arvo (sisalto$): IF MID$(UCASE$(haettuini$), 1, vpituus) = valinta$ AND tamaosio$ = osio$ THEN onkohta = INSTR(haettuini$, "=") haettuini$ = MID$(haettuini$, 1, onkohta) + sisalto$: m = 1 END IF PRINT #51, haettuini$ WEND 'Jos koko tiedosto on mennyt ohi eikä siitä ole löydetty edes alueen nimeä '(eli m on vieläkin 0), lisätään uusi valinta sisältöineen ja alueen 'nimineen: IF m = 0 THEN IF tamaosio$ <> osio$ THEN PRINT #51, osio$: PRINT #51, valinta$; sisalto$: m = 1 END IF CLOSE 50 CLOSE 51 'Lopuksi poistetaan vanha .ini ja muutetaan .tmp uudeksi .iniksi. KILL initiedosto$ + ".ini": NAME initiedosto$ + ".tmp" AS initiedosto$ + ".ini" END SUB
Varsin hyviä aliohjelmia!
Tiedoston olemassaolon tarkastaminen:
IF DIR$("tiedosto.dat") <> "" THEN PRINT "Tiedosto on olemassa." END IF
Tyhjän tiedoston luominen:
OPEN "tiedosto.dat" FOR OUTPUT AS #1 CLOSE #1
Tällaista mä olen odottanut! Todella hyvä. Siis täydellinen!
Ja Antti, toi DIR$ functio on qbx:n eli jos jollain on vanhempi, se ei toimi. Kyllä kannattaa hankkia qbx(qb 7.1), siinä tulee muutakin kivaa...
Jeps, mokasin. Seuraavan pitäisi toimia kaikissa QB:eissa, perustuu tiedoston koon tarkistamiseen.
OPEN "tiedosto.dat" FOR BINARY AS #1 IF LOF(1) <> 0 THEN PRINT "Tiedosto on olemassa." END IF CLOSE #1
Hyvä, tuo viimeinen toimii. Se luo tiedostonkin samantien, joten LOF-jossittelua ei tarvittaisi.
voisko joku tehä samantyyppisen visual basicille?
Tyhjiä tiedostoja saa myös komennolla
SHELL "rem > nimi.pääte"
ja tuo on hyöryllinen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.