int rivi_tuotteeksi(char *rivi, tTuote &tuote)
{
istrstream sstr(rivi);
return lue(sstr,tuote);
}
Koska tämä tietovirta käyttäytyy aivan samoin kuin
päätesyöttökin, voidaan tehdä aliohjelma lue,
joka lukee tuotteen tiedot ikäänkuin tiedostosta. Itse asiassa
ohjelman lukusilmukassa voitaisiin aivan hyvin kutsua myös
while ( 1 ) {
if ( lue(fi,tuote) ) break;
printf("%-20s %7.0lf %4d\n",tuote.nimike.c_str(),tuote.hinta,tuote.kpl);
}
mutta tällöin lukeminen loppuisi ensimmäiseen virheeseen tai
sopivalla tiedostolla rivijako menisi sekaisin. Tämän vuoksi
luettaessa tiedostoja joissa rivi on "yksi tietue", kannattaa lukea ensin rivin
sisältö merkkijonoon ja sitten muuttaa tämä merkkijono
tietueeksi.C:ssä merkkijonoa yritettiin purkaa sscanf- funktiolla, joka onkin erittäin helppokäyttöinen niin kauan kuin merkkijono sisältää vain lukuja, jotka voidaan kaikki erottaa kerralla. Jos kuitenkin erotettavien osien joukossa on merkkijonoja, menee ongelma tunnetusti hankalammaksi (tosin voidaan hoitaa erikoistapauksissa).
Jos kuitenkin merkkijonosta pitää saada 0-n erillistä osaa (merkkijonoa tai lukua), ei sscanf:ää voida käyttää!
C++:n strstream on taas siitä mukava, että se tekee merkkijonoon samanlaisen "lukuosoittimien" kuin muutkin tietovirrat tiedostoon. Näin voidaan palasia erotella yksi kerrallaan ja "lukemista" voidaan jatkaa siitä, mihin edellinen lukeminen jäi.