Thursday 30 October 2008 photo 1/2
|
Idag blev min programmerings uppgift färdig:
#include <iostream> //används för att kunna använda I/Oströmmen i datorn.
#include <fstream> //används för att kunna öppna och läsa filer.
#include <string> //används för att kunna använda strängar.
#include <io.h> //behövs för structen _finddata_t och funktionerna _findfirst, _findnext och _findclose.
#include <direct.h> //behövs för funktionerna _chdrive och _chdir
#include <windows.h> //används bla till funktionen Color
using namespace std;
//funktionerna deklareras.
int fil(string sokvag, string sokord);
int katalog(string namn, string sokord);
void Color(int col);
//Detta är ett program som söker igenom en angiven sökkatalog och dess underkataloger
//efter en angiven sökfras.
//
//Programmet är skrivet av Fabian Fasth, klass Pascal i kursen Programmering A.
void main()
{
//I void main() ges startinformation till användaren och användaren
//får ange sökord och sökväg som skickas iväg till en ny funktion.
//När programmet har kört färdigt skrivs det ut ifall det hittades
//träff eller om sökvägen inte fungerade.
//Definitioner.
string soktext, sokkatalog;
int nkatalog;
Color(2);
cout<<"*************************************************************"<<endl;
cout<<"******************* Fabians Sökprogram **********************"<<endl;
cout<<"*************************************************************"<<endl<<endl;
cout<<"Vargod skriv in söktext: ";
Color(32);
cin>>soktext; //användaren anger sokfrasen.
Color(2);
cout<<"Vargod skriv in första sökkatalogen: ";
Color(32);
cin>>sokkatalog; //användaren anger sökkatalog.
Color(2);
cout<<endl<<endl;
//sökfrasen och sökkatalogen skickas till funktionenkatalog som returnerar ett heltal.
//nkatalog blir då tilldelad det värdet.
nkatalog=katalog(sokkatalog,soktext);
//om nkatalog blir tilldelad 0, så hittades ingen träff,
//om det blev tilldelat 1, så gav det träffar.
//om det blev tilldelat 2, så var den angivna sökvägen tom.
if(nkatalog==0)
cout<<"Det hittades ingen träff!";
else if(nkatalog==1)
cout<<endl<<endl<<"Ovan angivna sökvägar gav träff!";
else if(nkatalog==2)
cout<<"Den angivna sökvägen är tom!";
cout<<endl<<endl;
}
int fil(string sokvag, string sokord)
{
//I funktionen fil, som får två strängar, sokvag och sokord, får då en sökväg och ett sökord.
//Dess uppgift är att jämföra dessa två strängar och om den hittar en träff skall funktionen
//returnera en etta, annars skall den returnera en nolla.
//definitioner.
int b=0;
char ch;
ifstream infil; //en variabel, infil, av typen istream skapas.
infil.open(sokvag.c_str()); //infil öppnar sökvägen för läsning eller skrivning.
while(infil.get(ch)) //infil tilldelar ch värdet av en bokstav i den öppnade filen.
{ //tills hela filen har lästs igenom.
if(ch==sokord[b]) //om ch är lika med första tecknet i sokord
{ //så jämförs nästa bokstav i filen med nästa tecken i sökordet.
while(ch==sokord[b])
{
infil.get(ch);
b++;
}
if(b==sokord.length()) //Ifall hela söksträngen har jämförts med filen (b=längden av sökordet)
{ //Så skall sökvägen skrivas ut på skärmen, den öppna filen skall stängas
cout<<sokvag<<endl; //och funktionen skall returnera en etta.
infil.close();
return 1;
}
}
}
infil.close(); //den öppna filen skall stängas
return 0; //funktionen returnerar noll eftersom att inget träff hittats.
}
int katalog(string namn, string sokord)
{
//Funktionen katalog tar emot två strängar, namn och sökord. Dess uppgift är att leta reda på
//filer i den angivna sökvägen. Den skall sedan skicka iväg sökvägen till funna filer till funktionen fil,
//och returnera en nolla ifall ingen träff hittats, en etta ifall en eller flera träffa hittats och
//två ifall en mapp är tom.
//definitioner
struct _finddata_t fd; //Här defineras en variabel fd av structtypen _findata_t.
string mappnamn, filnamn;
int a=0, nkatalog, nfil;
long hanterare; //Variabel som tar emot kontrollvärdet av _findfirst.
if(_chdrive(3)) //Arbetsdisken blir nu C, eftersom A=1, B=2 osv.
{
cout<<"Hårddisken C: är otillgänglig. Programmet avslutas."<<endl;
exit(EXIT_FAILURE); //Om _chdrive returnerar -1 indikerar det ett fel och programmet avslutas.
}
if(_chdir(namn.c_str())) //Här bestäms arbetskatalogen.
{
cout<<"Katalogen "<<namn<<"finns inte. Programmet avslutas."<<endl;
exit(EXIT_FAILURE); //Om _chdir returnerar -1 indikerar det ett fel och programmet avslutas.
}
//Har programmet kommit såhär långt så existerar katalogen namn.
//De två första filerna i en mapp heter alltid "." och "..", de
//pekar på den aktuella katalogen respektive moderkatalogen.
//Dessa behövs inte och därför anropas _findfirst och _findnext en gång.
hanterare = _findfirst("*.*", &fd); //Här hittas filen "."
if (hanterare==-1L) //funktionen returnerar -1 om ingen fil hittas
{ //och då avslutas programmet.
cout<<"Katalogen innehåller ett fel. Programmet avlsutas."<<endl;
exit(EXIT_FAILURE);
}
if (_findnext(hanterare, &fd)==-1L) //här hittas filen ".."
{
cout<<"Katalogen innehåller ett fel. Programmet avlsutas."<<endl;
exit(EXIT_FAILURE);
}
//Nu försöker vi hitta den första "riktiga" filen
//Om hanterare = -1 så finns ingen fil och mappen
//är tom, funktionen returnerar 2.
if (_findnext(hanterare, &fd)==-1L)
return 2;
//Har funktionen kommit så existerar en fil i katalogen och i
//variabeln fd finns all information om filen.
//Om den första filen är en mapp så är fd.attrib==med _A_SUBDIR
//och då anropar funktionen sig själv.
if (fd.attrib==_A_SUBDIR)
{
mappnamn=namn+"\"+fd.name;
nkatalog=katalog(mappnamn,sokord);
//Om katalogen returnerar 1 så har det hittats en fil
//och a sätts lika med 1, eftersom att det är första filen som hittats.
if(nkatalog==1)
a=1;
}
else
{
//Om första filen är en fil så skall funktionen fil anropas.
filnamn=namn+"\"+fd.name;
nfil=fil(filnamn, sokord);
//Om fil returnerade 1, så hittades en träff och a sätts
//lika med 1 eftersom att det är första filen som hittats.
if(nfil==1)
a=1;
}
//Nu letar programmet upp de resterande filerna i mappen.
while (_findnext(hanterare, &fd) == 0)
{
if (fd.attrib==_A_SUBDIR)
{
//om det är en katalog så anropar funktionen sig själv
//och returnerar den en etta så har en fil hittats och
//a ökas med ett.
mappnamn=namn+"\"+fd.name;
nkatalog=katalog(mappnamn, sokord);
if(nkatalog==1)
a++;
}
else
{
//Om det är en fil så anropas funktionen fil.
//returnerar den en etta så hittades en sökträff
//och a ökas med ett.
filnamn=namn+"\"+fd.name;
nfil=fil(filnamn, sokord);
if(nfil==1)
a++;
}
}
_findclose(hanterare);
if(a==0)
return 0;
else
return 1;
}
void Color(int col)
{
//Funktionen Color ändrar färg på texten och text bakgrunden i fönstret.
//den använder sig av biblioteket windows.h.
HANDLE h=(GetStdHandle(STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(h,col);
}
#include <iostream> //används för att kunna använda I/Oströmmen i datorn.
#include <fstream> //används för att kunna öppna och läsa filer.
#include <string> //används för att kunna använda strängar.
#include <io.h> //behövs för structen _finddata_t och funktionerna _findfirst, _findnext och _findclose.
#include <direct.h> //behövs för funktionerna _chdrive och _chdir
#include <windows.h> //används bla till funktionen Color
using namespace std;
//funktionerna deklareras.
int fil(string sokvag, string sokord);
int katalog(string namn, string sokord);
void Color(int col);
//Detta är ett program som söker igenom en angiven sökkatalog och dess underkataloger
//efter en angiven sökfras.
//
//Programmet är skrivet av Fabian Fasth, klass Pascal i kursen Programmering A.
void main()
{
//I void main() ges startinformation till användaren och användaren
//får ange sökord och sökväg som skickas iväg till en ny funktion.
//När programmet har kört färdigt skrivs det ut ifall det hittades
//träff eller om sökvägen inte fungerade.
//Definitioner.
string soktext, sokkatalog;
int nkatalog;
Color(2);
cout<<"*************************************************************"<<endl;
cout<<"******************* Fabians Sökprogram **********************"<<endl;
cout<<"*************************************************************"<<endl<<endl;
cout<<"Vargod skriv in söktext: ";
Color(32);
cin>>soktext; //användaren anger sokfrasen.
Color(2);
cout<<"Vargod skriv in första sökkatalogen: ";
Color(32);
cin>>sokkatalog; //användaren anger sökkatalog.
Color(2);
cout<<endl<<endl;
//sökfrasen och sökkatalogen skickas till funktionenkatalog som returnerar ett heltal.
//nkatalog blir då tilldelad det värdet.
nkatalog=katalog(sokkatalog,soktext);
//om nkatalog blir tilldelad 0, så hittades ingen träff,
//om det blev tilldelat 1, så gav det träffar.
//om det blev tilldelat 2, så var den angivna sökvägen tom.
if(nkatalog==0)
cout<<"Det hittades ingen träff!";
else if(nkatalog==1)
cout<<endl<<endl<<"Ovan angivna sökvägar gav träff!";
else if(nkatalog==2)
cout<<"Den angivna sökvägen är tom!";
cout<<endl<<endl;
}
int fil(string sokvag, string sokord)
{
//I funktionen fil, som får två strängar, sokvag och sokord, får då en sökväg och ett sökord.
//Dess uppgift är att jämföra dessa två strängar och om den hittar en träff skall funktionen
//returnera en etta, annars skall den returnera en nolla.
//definitioner.
int b=0;
char ch;
ifstream infil; //en variabel, infil, av typen istream skapas.
infil.open(sokvag.c_str()); //infil öppnar sökvägen för läsning eller skrivning.
while(infil.get(ch)) //infil tilldelar ch värdet av en bokstav i den öppnade filen.
{ //tills hela filen har lästs igenom.
if(ch==sokord[b]) //om ch är lika med första tecknet i sokord
{ //så jämförs nästa bokstav i filen med nästa tecken i sökordet.
while(ch==sokord[b])
{
infil.get(ch);
b++;
}
if(b==sokord.length()) //Ifall hela söksträngen har jämförts med filen (b=längden av sökordet)
{ //Så skall sökvägen skrivas ut på skärmen, den öppna filen skall stängas
cout<<sokvag<<endl; //och funktionen skall returnera en etta.
infil.close();
return 1;
}
}
}
infil.close(); //den öppna filen skall stängas
return 0; //funktionen returnerar noll eftersom att inget träff hittats.
}
int katalog(string namn, string sokord)
{
//Funktionen katalog tar emot två strängar, namn och sökord. Dess uppgift är att leta reda på
//filer i den angivna sökvägen. Den skall sedan skicka iväg sökvägen till funna filer till funktionen fil,
//och returnera en nolla ifall ingen träff hittats, en etta ifall en eller flera träffa hittats och
//två ifall en mapp är tom.
//definitioner
struct _finddata_t fd; //Här defineras en variabel fd av structtypen _findata_t.
string mappnamn, filnamn;
int a=0, nkatalog, nfil;
long hanterare; //Variabel som tar emot kontrollvärdet av _findfirst.
if(_chdrive(3)) //Arbetsdisken blir nu C, eftersom A=1, B=2 osv.
{
cout<<"Hårddisken C: är otillgänglig. Programmet avslutas."<<endl;
exit(EXIT_FAILURE); //Om _chdrive returnerar -1 indikerar det ett fel och programmet avslutas.
}
if(_chdir(namn.c_str())) //Här bestäms arbetskatalogen.
{
cout<<"Katalogen "<<namn<<"finns inte. Programmet avslutas."<<endl;
exit(EXIT_FAILURE); //Om _chdir returnerar -1 indikerar det ett fel och programmet avslutas.
}
//Har programmet kommit såhär långt så existerar katalogen namn.
//De två första filerna i en mapp heter alltid "." och "..", de
//pekar på den aktuella katalogen respektive moderkatalogen.
//Dessa behövs inte och därför anropas _findfirst och _findnext en gång.
hanterare = _findfirst("*.*", &fd); //Här hittas filen "."
if (hanterare==-1L) //funktionen returnerar -1 om ingen fil hittas
{ //och då avslutas programmet.
cout<<"Katalogen innehåller ett fel. Programmet avlsutas."<<endl;
exit(EXIT_FAILURE);
}
if (_findnext(hanterare, &fd)==-1L) //här hittas filen ".."
{
cout<<"Katalogen innehåller ett fel. Programmet avlsutas."<<endl;
exit(EXIT_FAILURE);
}
//Nu försöker vi hitta den första "riktiga" filen
//Om hanterare = -1 så finns ingen fil och mappen
//är tom, funktionen returnerar 2.
if (_findnext(hanterare, &fd)==-1L)
return 2;
//Har funktionen kommit så existerar en fil i katalogen och i
//variabeln fd finns all information om filen.
//Om den första filen är en mapp så är fd.attrib==med _A_SUBDIR
//och då anropar funktionen sig själv.
if (fd.attrib==_A_SUBDIR)
{
mappnamn=namn+"\"+fd.name;
nkatalog=katalog(mappnamn,sokord);
//Om katalogen returnerar 1 så har det hittats en fil
//och a sätts lika med 1, eftersom att det är första filen som hittats.
if(nkatalog==1)
a=1;
}
else
{
//Om första filen är en fil så skall funktionen fil anropas.
filnamn=namn+"\"+fd.name;
nfil=fil(filnamn, sokord);
//Om fil returnerade 1, så hittades en träff och a sätts
//lika med 1 eftersom att det är första filen som hittats.
if(nfil==1)
a=1;
}
//Nu letar programmet upp de resterande filerna i mappen.
while (_findnext(hanterare, &fd) == 0)
{
if (fd.attrib==_A_SUBDIR)
{
//om det är en katalog så anropar funktionen sig själv
//och returnerar den en etta så har en fil hittats och
//a ökas med ett.
mappnamn=namn+"\"+fd.name;
nkatalog=katalog(mappnamn, sokord);
if(nkatalog==1)
a++;
}
else
{
//Om det är en fil så anropas funktionen fil.
//returnerar den en etta så hittades en sökträff
//och a ökas med ett.
filnamn=namn+"\"+fd.name;
nfil=fil(filnamn, sokord);
if(nfil==1)
a++;
}
}
_findclose(hanterare);
if(a==0)
return 0;
else
return 1;
}
void Color(int col)
{
//Funktionen Color ändrar färg på texten och text bakgrunden i fönstret.
//den använder sig av biblioteket windows.h.
HANDLE h=(GetStdHandle(STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(h,col);
}
Comment the photo
6 comments on this photo
Directlink:
http://dayviews.com/approve/287820254/