previous next Up Title Contents Index

17.7 Tiedoston yhdellä rivillä monta kenttää, lukeminen C++:lla

Toteutetaan tuot_pal.c:tä vastaava ohjelma C++:n tietovirroilla:

tiedosto\tuot_pal.cpp - esimerkki tiedoston lukemisesta

	// Projektiin +ALI\mjonot.c 
	#include <iostream.h>
	#include <fstream.h>
	#include <strstrea.h>
	#include <stdio.h>
	#include <string>
	using namespace std;
	#include "mjonotpp.h"
	
	
	struct tTuote {
	  string nimike;
	  double hinta;
	  int    kpl;
	};
	
	void alusta(tTuote &tuote)
	{
	  tuote.nimike = "";
	  tuote.hinta = 0.0;
	  tuote.kpl   = 0;
	}
	
	int lue(istream &is,tTuote &tuote) {
	  char jono[50];
	  alusta(tuote);
	  is.getline(N_S(jono),'|');   tuote.nimike = poista_tyhjat(jono);
	  is.getline(N_S(jono),'|');
	  if ( sscanf(jono,"%lf",&tuote.hinta) < 1 ) return 1;
	  is.getline(N_S(jono),'\n');
	  if ( sscanf(jono,"%d",&tuote.kpl) < 1 ) return 1;
	  return 0;
	}
	
	int rivi_tuotteeksi(char *rivi, tTuote &tuote)
	{
	  istrstream sstr(rivi);
	  return lue(sstr,tuote);
	}
	
	int tulosta_tuotteet(void)
	{
	  tTuote tuote;
	  char rivi[80];
	
	  ifstream fi("TUOTTEET.DAT");
	  if ( !fi ) return 1;
	
	  cout << "\n\n\n";
	  cout << "-------------------------------------------\n";
	
	  while ( 1 ) {
	    if ( !fi.getline(rivi,sizeof(rivi))) break;
	    if ( rivi_tuotteeksi(rivi,tuote) ) continue;
	    printf("%-20s %7.0lf %4d\n",tuote.nimike.c_str(),tuote.hinta,tuote.kpl);
	  }
	
	  cout << "-------------------------------------------\n";
	  cout << "\n\n\n";
	
	  return 0;
	}
	
	
	int main(void)
	{
	  if ( tulosta_tuotteet() ) {
	    cout <<  "Tuotteita ei saada luetuksi!\n";
	    return 1;
	  }
	  return 0;
	}
	



previous next Up Title Contents Index