Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Operacje Na Plikach, Łańcuchach - C++


Rekomendowane odpowiedzi

Opublikowano

Dziś pokażę, wam jak wykonuje się operacje na plikach oraz łańcuchach. W dodatku paru innych rzeczy :) Poradnik polecam dla tych którzy pierwszy krok w C++ mają już za sobą.

 

Omówię wszystkie rzeczy na podstawie mojego programu, który kiedyś stworzyłem, a mianowicie Generator Szkieletów HTML.

 

A więc zaczynamy!

 

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#include "polskie.h"

Normalka - podajemy biblioteki których będziemy używać.

 

stdlib - standardowa biblioteka języka C, jako że pochodzi z tego języka przed nazwą stawiamy "c".

iostream - standardowa biblioteka wyjścia i wejścia konsoli.

fstream - standardowa biblioteka wejścia i wyjścia strumienia plików. Będziemy jej używać do obsługi plików.

string - biblioteka dzięki której będziemy mogli operować na nowym typie danych - string.

polskie.h - Moja prywatna mini-biblioteka, dzięki której uproszczone będzie korzystanie z polskich znaków. (Link: http://www.mpcforum.pl/topic/100176-polskie-znaki-w-c/)

 

 

using namespace std;

Deklarujemy, że będziemy używać przestrzeni nazw std z bibliotek iostream i fstream (potrzebne do działania zawartych w nich funkcji)

 

 

int main()
{

Rozpoczynamy program.

 

 

system("Instrukcja.txt");

Linijka, dzięki której przymusowo pojawi się instrukcja obsługi generatora, zawarta razem z nim :P Dopóki nie zamkniemy tego pliku, dalsze działanie programu zostanie wstrzymane.

 

 

start:

Ustawiamy znacznik. (Więcej o tym będzie dalej)

 

 

cout<<"Witaj w generatorze szkielet"<<o<<"w HTML by Prog(r)amer!"<<endl<<endl;

Powitanie :)

 

 

cout<<"Podaj nazw"<<e<<" pliku strony:";
string ac;
cin>>ac;
cin.ignore();

Pobieramy nazwę przyszłego pliku do zmiennej ac.

 

 

cout<<"Podaj tytu"<<l<<" strony:";
string bc;
cin>>bc;
cin.ignore();

cout<<"Podaj autora strony:";
string cc;
cin>>cc;
cin.ignore();

cout<<"Podaj opis strony:";
string dc;
cin>>dc;
cin.ignore();

cout<<"Podaj s"<<l<<"owa kluczowe strony:";
string ec;
cin>>ec;
cin.ignore();

cout<<"Podaj e-mail autora strony:";
string fc;
cin>>fc;
cin.ignore();

Pobieramy kolejne informacje do kolejnych zmiennych dla generatora.

 

 

   bool cb = true;
   bool db = true;
   bool eb = true;
   bool fb = true;

   if(cc == "0") {
     cb = false;
     cc = "";}
   if(dc == "0") {
     db = false;
     dc = "";}
   if(ec == "0") {
     eb = false;
     ec = "";}
   if(fc == "0") {
     fb = false;
     fc = "";}

Tutaj małe udogodnienie dla użytkownika. Jeśli nie chce skorzystać z możliwości wygenerowania np. Autora strony musi wpisać 0.

Tutaj tworzymy zmienne logiczne (bool) i ustawiamy ich wartość na true. Dalej sprawdzamy czy w łańcuchach nie ma zera. Jeśli jest, ustawiamy wartość zmiennej bool na false i czyścimy łańcuch z jakichkolwiek danych. Do czego będą nam potrzebne boole? Dowiecie się tego później :P

 

 

   string sa;
   string sb;
   string sc;
   string sd;
   string se = "";
   string se1 = "";
   string sf = "";
   string sf1 = "";
   string sg = "";
   string sg1 = "";
   string sh = "";
   string sh1 = "";
   string si;
   string sj;
   string sj1;
   string sk;
   string sl;
   string sm;
   string sn;

Tutaj tworzymy zmienne, w których będziemy przechowywać szkielet strony.

 

 

   sa = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n";
   sb = "<html>\n";
   sc = "<head>\n";
   sd = "  <meta http-equiv='content-type' content='text/html; charset=ISO-8859-2' />\n";
   if(cb) {
   se = "  <meta name='author' content='";
   se1 = "' />\n";
   } if(fb) {
   sf = "  <meta http-equiv='reply-to' content='";
   sf1 = "' />\n";
   } if(db) {
   sg = "  <meta name='description' content='";
   sg1 = "' />\n";
   } if(eb) {
   sh = "  <meta name='keywords' content='";
   sh1 = "' />\n";
   }
   si = "  <meta name='generator' content='Generator HTML by Prog(r)amer' />\n";
   sj = "  <title>";
   sj1 = "</title>\n";
   sk = "</head>\n";
   sl = "<body>\n\n";
   sm = "</body>\n";
   sn = "</html>";

Teraz "wpychamy" w te zmienne szkielet. Tutaj wyjaśnia się po co użyliśmy wcześniej zmiennych bool. Jeśli użytkownik wpisał 0, to zmienna zmieniła wartość na false, i generator pominie zupełnie niepotrzebny kawałek szkieletu.

 

 

   string strona;
   strona = sa + sb + sc + sd + se + cc + se1 + sf + fc + sf1 + sg + dc + sg1 + sh + ec + sh1 + si + sj + bc + sj1 + sk + sl + sm + sn;

Wpychamy teraz całą treść szkieletu, łącząc ją z podanymi przez użytkownika danymi do jednej zmiennej :)

 

 

ac += ".html";

Dodajemy do zmiennej z nazwą pliku końcówkę .html

 

 

ofstream out(ac.c_str());

Łączymy się z plikiem o podanej przez użytkownika nazwie (Jeśli plik nie istnieje, zostanie utworzony, jeśli istnieje, zostanie wyczyszczony)

 

 

out<<strona;

Wysyłamy całą zawartość zmiennej strona do pliku.

 

 

   cout<<endl<<"Trwa generowanie strony..."<<endl<<endl;
   int i;
   while(i < 500000000) i++;
   i = 0;

Parę linijek dzięki którym będziemy udawać, że generator ciężko pracuje :) Jeśli chcesz mieć natychmiastowe wyniki, lub masz wolnego kompa skasuj pętle :P

 

 

   cout<<"Strona zosta"<<l<<"a wygenerowana!"<<endl<<endl;    
   bottom:

Komunikat i kolejny znacznik.

 

 

   cout<<"Czy chcesz wygenerowa"<<c<<" nast"<<e<<"pn"<<a<<" stron"<<e<<"?(T/N)";
   char j;
   cin>>j;
   cin.ignore(); 
   switch(j){
     case 't' :
          goto start;
          break;
     case 'T' :
          goto start;
          break;
     case 'n' :
          goto sroto;
          break;
     case 'N' :
          goto sroto;
          break;
     default :
          goto bottom;
          break;
          }

Tutaj pytamy się czy użytkownik chce jeszcze raz użyć generatora.

Jeśli tak (odpowiedź t lub T) program rozpoczyna swoje działanie od znacznika start: (tego którego umieściliśmy na samym początku programu).

Jeśli nie (odpowiedź n lub N) program skacze do znacznika start, który jest umieszczony na samym końcu programu (zaraz do niego dojdziemy).

Jeśli odpowiedź jest jakakolwiek inna program cofnie się do znacznika bottom, tym samym zadając jeszcze raz pytanie.

 

 

   sroto :
   return 0;
}

Tu kończymy pracę naszego programu :)

 

 

I tak oto dobrnąłeś do końca tego kursu :) Nauczyłeś się obsługiwać, łańcuchy, tworzyć pliki i wysyłać do nich dane i wiele innych :)

 

Tu, jakby ktoś się pogubił, podaję cały kod:

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
#include "polskie.h"

using namespace std;

int main()
{
   system("Instrukcja.txt");
   start:
   cout<<"Witaj w generatorze szkielet"<<o<<"w HTML by Prog(r)amer!"<<endl<<endl;
   cout<<"Podaj nazw"<<e<<" pliku strony:";
   string ac;
   cin>>ac;
   cin.ignore();
   cout<<"Podaj tytu"<<l<<" strony:";
   string bc;
   cin>>bc;
   cin.ignore();
   cout<<"Podaj autora strony:";
   string cc;
   cin>>cc;
   cin.ignore();
   cout<<"Podaj opis strony:";
   string dc;
   cin>>dc;
   cin.ignore();
   cout<<"Podaj s"<<l<<"owa kluczowe strony:";
   string ec;
   cin>>ec;
   cin.ignore();
   cout<<"Podaj e-mail autora strony:";
   string fc;
   cin>>fc;
   cin.ignore();

   bool cb = true;
   bool db = true;
   bool eb = true;
   bool fb = true;

   if(cc == "0") {
     cb = false;
     cc = "";}
   if(dc == "0") {
     db = false;
     dc = "";}
   if(ec == "0") {
     eb = false;
     ec = "";}
   if(fc == "0") {
     fb = false;
     fc = "";}

   string sa;
   string sb;
   string sc;
   string sd;
   string se = "";
   string se1 = "";
   string sf = "";
   string sf1 = "";
   string sg = "";
   string sg1 = "";
   string sh = "";
   string sh1 = "";
   string si;
   string sj;
   string sj1;
   string sk;
   string sl;
   string sm;
   string sn;

   sa = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n";
   sb = "<html>\n";
   sc = "<head>\n";
   sd = "  <meta http-equiv='content-type' content='text/html; charset=ISO-8859-2' />\n";
   if(cb) {
   se = "  <meta name='author' content='";
   se1 = "' />\n";
   } if(fb) {
   sf = "  <meta http-equiv='reply-to' content='";
   sf1 = "' />\n";
   } if(db) {
   sg = "  <meta name='description' content='";
   sg1 = "' />\n";
   } if(eb) {
   sh = "  <meta name='keywords' content='";
   sh1 = "' />\n";
   }
   si = "  <meta name='generator' content='Generator HTML by Prog(r)amer' />\n";
   sj = "  <title>";
   sj1 = "</title>\n";
   sk = "</head>\n";
   sl = "<body>\n\n";
   sm = "</body>\n";
   sn = "</html>";

   string strona;
   strona = sa + sb + sc + sd + se + cc + se1 + sf + fc + sf1 + sg + dc + sg1 + sh + ec + sh1 + si + sj + bc + sj1 + sk + sl + sm + sn;

   ac += ".html";

   ofstream out(ac.c_str());
   out<<strona;
   cout<<endl<<"Trwa generowanie strony..."<<endl<<endl;
   int i;
   while(i < 500000000) i++;
   i = 0;
   cout<<"Strona zosta"<<l<<"a wygenerowana!"<<endl<<endl;    
   bottom:
   cout<<"Czy chcesz wygenerowa"<<c<<" nast"<<e<<"pn"<<a<<" stron"<<e<<"?(T/N)";
   char j;
   cin>>j;
   cin.ignore(); 
   switch(j){
     case 't' :
          goto start;
          break;
     case 'T' :
          goto start;
          break;
     case 'n' :
          goto sroto;
          break;
     case 'N' :
          goto sroto;
          break;
     default :
          goto bottom;
          break;
          }
   sroto:
   return 0;
}

 

Program do pobrania:

http://www.speedyshare.com/files/20212115/Generator_HTML.zip

 

Skan:

http://www.virustotal.com/pl/analisis/f4af7b10271781a36ee5a5a3a574af2fcd1b3246a20d6033b3700ce4b7a54ea9-1262964924

 

Poradnik by Programerus. Zabraniam kopiowania go gdzie indziej bez mojej zgody!

9989.jpg

"Głupców nie sieją, sami się rodzą"

  • 1 rok później...
  • 1 rok później...
Opublikowano

Dobra, etykiete start: moge zrozumiec, ale po co niby robic etykiete sroto skoro i tak program by sie zakonczyl, bo to jest koniec? wstarczylo zrobic if(j==T || j==t) goto start:

Opublikowano

Srsly? Odkopujesz ponury absurd napisany przez człowieka, który uwa<<z<<a <<z<<e takie rozwi<<a<<zanie jest dobre?

 

Jedyny fragment, który jest jakkolwiek sensowny:

"Zabraniam kopiowania go".

Halleluja!

Ta sygnatura jest pusta.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...