Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Ini-tiedostojen käsittely

Sivun loppuun

jsbasic [16.12.2003 19:27:44]

#

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

Antti Laaksonen [17.12.2003 21:14:22]

#

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

sooda [18.12.2003 10:01:43]

#

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...

Antti Laaksonen [18.12.2003 14:48:46]

#

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

jsbasic [22.12.2003 11:23:25]

#

Hyvä, tuo viimeinen toimii. Se luo tiedostonkin samantien, joten LOF-jossittelua ei tarvittaisi.

miiro [23.12.2003 15:45:09]

#

voisko joku tehä samantyyppisen visual basicille?

Antti Laaksonen [23.12.2003 15:52:02]

#

miiro: ks. https://www.ohjelmointiputka.net/keskustelu/1997-ini-tiedostot

Dude [13.08.2007 15:23:23]

#

Tyhjiä tiedostoja saa myös komennolla

SHELL "rem > nimi.pääte"

ja tuo on hyöryllinen.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta