One problem that I see with that code, is the fact that you are trying to use the equivalent of $chr(2) for your token separator. In mIRC, $chr(2) is the character to start/end bolding.
Since you already use the | character, I'd suggest getting the ascii value for that character and using it. I suspect that this is the equivalent of $chr(124). You can determine what the ascii value is by using //echo -a $asc(|)
You also have the setting for the variable in the wrong location.
Here's a little re-write of your current code with my suggestions in place.
on *:TEXT:*how are you*:?:{
var %responses = Ooohh hi | howdy!
.msg $nick $gettok(%responses,$r(1,$numtok(%responses,124)),124)
}
As to using a text file, I suggest you follow these instructions the first time. After that some of them you can bypass as the information will not change.
1) Type //echo -a $mircdir
2) Note the directory path and drive letter that is returned.
3) Open a text editor (Notepad is a good one for a beginner, and it comes with Windows)
4) Create your file in the text editor.
4a) For this situation, I suggest putting one response per line.
5) Save the file in the previously noted directory using File -> Save As.
5a) Recommend you use a .txt file extension, which is the default for Notepad.
6) Here's a suggested re-write of your code using a text file.
on *:text:*how are you*:?: .msg $nick $read(responses.txt)
Note that I used a filename of responses.txt. There is nothing that says you have to use this.