Identifiers can handle multiple spaces fine. $read() is a bit different, because it also evaluates the line read, so multiple spaces are truncated. To prevent that, use the n switch, then a $replace() to replace all spaces (char 32) with char 160:
Code:
$replace($read(file.txt,[color:red]n[/color]),$chr(32),$chr(160))

By the way, using char 160 to display spaces isn't recommended for a script that's going to be public. The reason is that char 160 isn't a space on certain (console) fonts. Personally, instead of replacing spaces with char 160, I insert ^B (ctrl+B, bold) pairs between two consecutive spaces. The ^B^B pair itself isn't visible but forces mirc to display two spaces in a row. Here's an alias that automatically inserts all the necessary ^B pairs in the input string:
Code:
alias keepspaces var %a | !.echo -q $regsub($1,/(?<=^| )(?=$| )/g,$str($chr(2),2),%a) | return %a

Example usage: //echo -a $keepspaces($read(file.txt,n))


/.timerQ 1 0 echo /.timerQ 1 0 $timer(Q).com