Laboratoria nr 14 program nr 2

Pliki tekstowe i binarne. Operacje na plikach tekstowych.

Przyjmijmy, że jest dostępny plik tekstowy txt np. example.txt do którego, z procesu przetwarzania tekstu ze stron internetowych, co 10 minut poprzez Wi-fi zapisywane są dane w postaci łańcuchów znaków do wybranego pliku na serwerze. Przykładowa zawartość tego pliku została pokazana poniżej.

example.txt

s1 s2 s3
s4 s5 s6

Należy napisać program który odczyta zawartość podanego pliku oraz odpowiednio go przetworzy. Przetworzenie polega na obliczeniu i podaniu dla użytkownika:

– ilości linii znajdujących się w pliku,

– ilości liter bez spacji,

– ilości liter ze spacjami

– ilości wyrażeń w postaci słów (tokenów) znajdujących się w pliku.

Przykładowy zrzut z działającego programu przedstawiono poniżej na rysunku 1. Zebrane dane mają zostać, oprócz wyświetlenia ich na standardowym wyjściu konsoli, zapisane do oddzielnego pliku np. save.txt.

image

Rysunek 1. Zrzut działającego programu.

Szkielet przykładowej aplikacji został umieszony poniżej. Szkielet ten zawiera elementy które należy odpowiednio uzupełnić. Oczywiście można zaproponować własne, oryginalne rozwiązania. Poszczególne informacje dotyczące zebranych statystyk z przetworzonego pliku mają zostać umieszczone w strukturze. Z tego względu należy zaprojektować odpowiednie funkcje do wprowadzania oraz wyprowadzania danych tej struktury.

#include "stdafx.h"
#include <iostream>
#include <string>

// Biblioteka dostarczajaca interfejs do zapisu/odczytu danych do pliku
// @see http://www.cplusplus.com/reference/iostream/fstream/
#include <fstream>

using namespace std;

// Struktura przechowujaca informacje o zebranych ststatystychach z analizowanego tekstu
struct statStr {
	std::string text;
	int cLine;
	int ???;
	int cLetter;
	int ???;
};

/**
	Prototyp funkcji do obliczania ilosci liter wraz ze spacjami
*/
int cSpaceLetter(???);

/**
	Prototyp funkcji do obliczania ilosci liter bez spacji
*/
int ???(string s);

/**
	Prototyp funkcji do obliczania ilosci wyrazen
*/
int cToken(????);

/**
	Prototyp funkcji do pokazywania zebranych i zapisanych w strukturze ststystyk
	@note :: UWAGA prosze zastosowac zapis bez modyfikatora const i referencji 
	@note :: UWAGA jesli zastosuja Panstwo modyfikator const i referencje to 
				prosze wyjasnic do czego one sluza (jak dzialaja)
*/
void showStatStr(const statStr &s);

/**
	Prototyp funkcji do zapisywania zebranych i zapisanych w strukturze ststystyk do pliku
	@note :: UWAGA prosze zastosowac zapis bez modyfikatora const i referencji 
	@note :: UWAGA jesli zastosuja Panstwo modyfikator const i referencje to 
				prosze wyjasnic do czego one sluza (jak dzialaja)
*/
void saveStat(const statStr &s);

/**
	Program glowny do prezentujacy mozliwosc odczytywania oraz zapisywania
	danych do wybranych plikow w C++

	@author Marcin Mironczuk
*/
int main()
{
	string line;

	// Utworzenie "uchwytu" do obslugi wybranego pliku
	ifstream myfile;
	// Otwarcie pliku
	myfile.???(???);
  
	// Jesli udalo sie otworzyc plik to rozpocznij jego przetwarzanie
	if (myfile.is_open()) {
		
		double suma = 0;
		int i = 0;
		
		int ccLetter = 0;
		int ccToken = 0;
		int ccSpaceLetter = 0;

		string sLine;

		// Statyczne przydzielenie pamieci na strukture
		statStr s;

		// Przetwarzanie otwartego pliku w petli
		while (myfile.METODA_NADZORUJACA_CZY_OSIAGNIETO_KONIEC_PLIKU()) {
			// Pobranie lini z pliku i zapis do zmiennej line
			getline(???,???);
			
			// Uzycie zdefiniowanych plikow do przetwarzania linii tekstu
			// w celu zebrania odpowiednich ststystyk
			ccLetter += ???(line);
			ccToken += ???;
			??? += cSpaceLetter(line);

			sLine += line + " ";

			i++;
		}
		
		s.cLetter = ???;
		s.??? = i;
		???;
		s.??? = ccToken;
		s.??? = ???;

		// Pokazanie statystyk na wyjsciu konsolii
		showStatStr(s);
		
		// Zapis statystyk do pliku
		saveStat(s);

		// Zamkniecie pliku
		myfile.close();
	} else {
		// Jesli nie udalo sie otworzyc pliku to wyswietl odpowiedni komunikat dla uzytkownika
		cout << "Nieudana proba otwarcia pliku";
	}

	cin.get();

	return 0;
}

int cSpaceLetter(string s) {
	// Algorytm
}

int cLetter(string s) {
	// Algorytm
}

int cToken(string s) {
	// Algorytm
}

void showStatStr(const statStr &s) {
	// Algorytm pokazania pol struktury
}

void saveStat(const statStr &s) {
	ofstream myfile;
	myfile.METODA_DO_OTWIERANIA_PLIKU ("???");

	myfile << "Zebrane statystyki.\n";
	myfile << "Ilosc przetworzonych linii: " << ??? << endl;
	???
	???
	myfile << "Ilosc wyrazen w pliku: " << ??? << endl;
	???;

	myfile.ZAMKNIECIE_PLIKU();
}

Jedna odpowiedź do tego wpisu.

  1. Autor: Marcus dnia 05.06.11 o godz. 20:26

    This website truly has all the information and facts I needed
    about this subject and didn’t know who to ask.

Skomentuj ten wpis