The fact that /write is slow cannot be changed. If you opened a 15M file in notepad, altered it, and then saved it again, notepad would be just as slow as mIRC.

By the looks of your comments, it seems like your problems are because your 'seen' script is either inefficient or incorrectly adding names to your list. Assuming the average length of a Nick:ctime:channel:text line is 100-150 characters, that means you have 100000-150000 individual nicks listed. I find that hard to believe. I don't know how your script is working, but I don't think that it should have more than a few thousand entries at most. Without seeing your script, I can't judge whether it is working properly or not, but I would suspect not.

There are many ways that you could make the script more efficient. Including the methods that were mentioned above (hash tables being the most efficient), you could also split your single file into several smaller files. This could be done in several ways as well.

1. You could separate the lists by the first letter of the nickname. ie. You could have seen.a.txt, seen.b.txt, seen.c.txt, etc. Since you always know what the first character of the nick you are searching/updating, you always know which file you need to $read or /write. By splitting the large file into multiple files, you significantly speed up the search/update process.

var %file = $+(seen.,$lower($left($nick,1)),.txt)
var %read = $read(%file,w,$+($nick,:*))


2. Another option would be to create a SEEN folder and make a separate .ini or .txt file for each nickname. Obviously, this would speed up the search/update process because you wouldn't have to search anything. Personally, I would use .ini files for this method. Using ini files would also allow you to expand the seen information to include more data (last x quit messages, last x hosts, etc). You could then use that information to expand your seen script's features, or expand other parts of your scripts to use that same information. You could also create separate folders or separate headers within the ini to represent different networks if you use more than one network.

var %file = $+(seen/,$nick,.txt)
if ($exists(%file) {
writeini %file $network lastseen $ctime
writeini %file $network lastmsg $1-
}

-genius_at_work