Kod nie działa bo:
- Wywołujesz funkcję writes() z onload w <body>, której nie masz,
- div nie "posiada" zdarzenia onload <div ... onload="reader()">,
- Z każdym wywołaniem funkcji reader() zmienna liczba jest zerowana,
[ edit ]
od "pojawienia" się HTML5, nie wiem jak było wcześniej, niech Mnie ewentualnie ktoś "poprawi", nie stosujemy zdarzeń wewnątrz kodu html (chodź Mi o to, że nie jest to dobra praktyka), tylko "używamy" w js-ie np.: addEventListener-a.
Zapis
con=document.querySelector('.container')
dobrze jest "wyciągnąć" poza funkcję, nie ma potrzeby z każdym wywołaniem funkcji reader() (co 1 sekundę w tym przypadku) pobierać referencję do elementu <div class="container" ... >
Moja propozycja zmian w kodzie przy pomocy arrow function Codepen 
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
</style>
</head>
<body>
<div class="container"></div>
</body>
</html>
window.onload = () => {
const board = document.querySelector('.container');
const msg = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ut tellus lorem. Curabitur pellentesque nunc sed ultrices tempus. Vivamus ullamcorper lectus leo, sed iaculis leo interdum sit amet. Sed nec posuere enim. Nam feugiat nisi dolor, non feugiat sapien varius quis. Quisque imperdiet est sed sem vulputate, vitae ultrices nibh tempus. Fusce sed malesuada velit.';
const msg_length = msg.length - 1;
let char_index = 0;
const id_interval = setInterval(() => {
//if (char_index > msg_length) char_index = 0;
if (char_index > msg_length) clearInterval(id_interval);
board.textContent += msg.charAt(char_index++);
}, 150)
}