Ir pienākusi diena, kad vajag kādu informāciju ielasīt no diska, sastopamies ar problēmu: “kā pie velna, kaut ko tādu izdarīt?”. Šīs idejas risinājums slēpjas šajā jaukajā bibliotēkā:
#include <fstream>
Tā ir sanācis, ka mums šī rindiņa ir jāpieliek, lai programmiņai būtu iespēja piekļūt failiem. Īstenībā nosaukums arī nedaudz ir atvasināts no “file stream” (tas tā lai vieglāk atcerēties). Nu, bet tad, kad esam šo pielikuši savas mazās programmiņas kodam, mums parādās iespēja izmantot jaunas fīčas:
- fstream
- ifstream
- ofstream
Ar šiem mazulīšiem mēs varam veikt visādas jaukas lietas ar failiem: atvērt, modificēt, rakstīt jaunus utt. Kā jauku piemēru mēs varam ņem programmu, kas ielasīs un izvadīs failu konsolītē un arī izveidos jaunu failu, kur ierakstīs ielasīto failu.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream fails("tekstafails.txt");
if (fails.is_open())
{
ofstream fails2("rezultats.txt");
char c;
for (fails.get(c); fails.good(); fails.get(c))
{
//ŠEIT VIETA MODIFIKĀCIJĀM
cout << c;//izvadam konsolītē simbolu
if (fails2.good()) fails2.put(c);//ierakstam failā simbolu
}//cikls atkārtosies kamēr fails nav beidzies
fails.close();
fails2.close();
}
return 0;
}
Tātad apskatīsim nedaudz tuvāk. Pamanījāt, ka mēs lietojam ifstream
, šis mazulītis domāts faila ielasīšanai, varbūt ar viņu var kaut ko vairāk sadarīt, es tiešām nezinu. Principā viņš jums būtu jāuzskata kā mainīgā tips (līdzīgi kā skaitļiem ir int
, burtiem ir char
), tātad fstream
ir failiem. Vēl ir sastopams ifstream
– faila nolasīšanai un ofstream
– failu rakstīšanai. Labi turpinām ar: fails("tekstafails.txt");
šeit mēs vārdu “fails” lietojam kā mainīgā nosaukumu (tas varbūt gandrīz jebkāds, tikai nedrīkst sākties ar ciparu u.c. zīmēm, izņemot alfabēta burtus), tas būs vajadzīgs, lai vēlāk varētu izsaukt šo mazulīti un liktu tam padarīt kādu darbiņu. Teksts pēdiņās norāda, kur atrodas fails. Ja ir tikai faila nosaukums tad programma automātiski mēģinās failu atrast tajā mapītē, kurā programmiņa glabājas. Mēs varam arī norādīt kādu citu vietu, piemēram, “C:/dati/tekstinsh.txt”. Tādas divas slīpās svītras ir nepieciešamas, jo dators gaida, kad aiz pirmās būs kāds speciāls simbols, piemēram, “n”, kas nozīmē jaunu rindiņu.
Dodamies tālāk! Mūsu jaunajam mainīgajam (mazulītim) ir visādas jaukas komandas. Piemēram, viena no tām ir .is_open()
. Tā pastāsta, vai ir izdevies atvērt failu, ja jā, tad tā teiks – true
, pretējā gadījumā – false
. Šādu pārbaudi noteikti vajadzētu veikt, lai nesanāk, ka mēģinām kaut ko izdarīt ar failu, kuru nemaz neesam atvēruši. Tālāk pēc pārbaudes, ja fails ir atvērts, sākam darboties ar to. Tā kā mēs vēlamies izvadīt tekstu jaunā failā vajadzēs lietot ofstream
. Principā viņš ir tāds pats, tikai tas veido failus, bet iepriekšējais ifstream
– atver. Ievērojāt, ka mēs viņu pēc pārbaudes ielikām. Tas tāpēc, lai neizveidojās lieks fails, ja mums nav sanācis atvērt nolasīšanas failu.
char c;
for (fails.get(c); fails.good(); fails.get(c))
Šis ir cikls, kas ielasīs jaunu simbolu no faila tik ilgi kamēr fails nebeigsies. Simbolu glabāsim char c;
es nosaucu par c
(jo viegli atcerēties), bet tā nosaukumu var veidot pēc brīvas izvēles. Lai ielasītu simbolu mēs izmantojam .get();
kā parametru norādot mainīgo, kurā saglabāt simbolu. Pēc simbola ielasīšanas mums ir jāpārbauda ar .good();
vai viss veiksmīgi ir noticis, kad fails beigsies .good();
atgriezīs false
un cikls apstāsies. Tagad iepazīsimies tuvāk ar to, ko mēs darām šajā ciklā. Simbols tiek izvadīts konsolītē un ar fails2.put(c);
tiek pateikts failu rakstīšanas mainīgajam fails2
rakstīt simbolu jaunizveidotajā failā. Ja mums vajadzīgas kaut kādas modifikācijas, tad tās ir jāievieto pirms izvades konsolē. Piemēram, ja mums vēl būtu jāsaskaita simboli, tad mēs pirms cikla definētu skaitļu mainīgo int n = 0;
un ciklā iekļautu n++;
kad cikls beigtu savu darbību mainīgajā n
glabātos ielasīto simbolu skaits. Un tad, kad cikls ir beidzies, mums ir jāpaziņo datoram, ka mēs vairs neizmantosim atvērtos failus, to var izdarīt ar .close();
palīdzību. Labi man apnika rakstīt, es ceru ideju sapratāt. Šī pamācība vairāk vai mazāk bija paredzēta maniem kolēģiem. Tīri teorētiski varbūt kādam citam arī noderēs.