mIRC Home    About    Download    Register    News    Help

Print Thread
#205154 14/10/08 07:08 PM
J
Joe_Dean
Joe_Dean
J
I love working with INI's. laugh

How would I search through every INI in the specified directory and return the value of the specified item in each INI? Example:

Quote:
Files in the directory \INI\:
1.ini
2.ini
3.ini
etc.


Quote:
Each INI file in this directory contain this:
blah=something


Quote:
If this on TEXT event happens:
Joe: !searchini
..I want it to return the values of 'blah=' in each INI...



#205155 14/10/08 07:16 PM
Joined: Nov 2006
Posts: 1,552
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Nov 2006
Posts: 1,552
The data stored at ini files is allocated in one or more [sections]. Do sections really don't play a role in this question? Just an enquiry, because - maybe - you might use different sections of one ini file (instead of multiple inis) to store your data anyway smile

J
Joe_Dean
Joe_Dean
J
No, all INI files contain exactly this:

Code:
[settings]
name=


The only difference between each INI is the value of 'name='.

#205163 14/10/08 09:50 PM
Joined: Nov 2006
Posts: 1,552
H
Hoopy frood
Offline
Hoopy frood
H
Joined: Nov 2006
Posts: 1,552
Ok. This is easier than the script here , but you might identify the similar structure:

1) An on text event for the !trigger. Here further flood protection/a restricted access to the trigger etc might be added.

2) Now it scans for all (matching on *.ini) files of a specific directory. A command, (in this case: "searchini") is performed on each matching file.

3) This searchini-command (an alias) does the actual in-file search, this time it's a $readini command (the other script used /filter). The result ("matches") of each in-file search is written to a temporary file. All the results thus sum up in this temporary file (and you can format the desired output here).

4) After all the files had been processed by the command, it will check if there had been any matches (=is there a tempfile?). If this is true, the tempfile is "played" to the channel (which is a good way to prevent message flood, and in fact that's why I used a temp-file at all smile ). The tempfile can now be removed.

Code:
on *:text:!searchini:#YOURCHANNEL: {
  var %dir = $mircdir $+ ini
  noop $findfile(%dir,*.ini,0,searchini $1-)
  if ($isfile(searchiniresults.txt)) {
    .play -q5m3 $chan searchiniresults.txt 500
    .remove searchiniresults.txt
  }
}

alias -l searchini {
  if ($readini($1-,settings,name)) {
    write searchiniresults.txt INI: $nopath($1-) VALUE: $v1
  }
}


Joined: Jan 2007
Posts: 1,155
D
Hoopy frood
Offline
Hoopy frood
D
Joined: Jan 2007
Posts: 1,155
Thats a cool way of doing it. I do it the noob way I guess.

Use $ini to find out how many items are in the section, how many sections in the file. Etc. Then just use a while loop to run through each one.


Code:
var %xx = $ini(file.ini,section,0)
while (%xx) { msg $chan $readini(file.ini,section,$ini(file.ini,section,%xx)) }
dec %xx
}


Link Copied to Clipboard