Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 02 / README.md
blob: 2753f182c7efe4de1e9d1659df02365914446cdb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172

##  Потоци и Файлове (част 1). Текстови файлове.
Видове потоци:
 - Потоци за вход (istream).
 - Потоци за изход (ostream).
 
![enter image description here](https://i.ibb.co/VDdDSnM/potoci.gif)


#####  Пример за работа с вход от конзолата. cin (обект от тип istream).
 ```c++
#include <iostream>
using namespace std;

int main()
{
	int a, b;
	cin >> a >> b;
}
 ```
 Четем от стандартния вход.

#####  Пример за работа с поток за изход. cout (обект от тип ostream).
 ```c++
#include <iostream>
using namespace std;

int main()
{
	int a = 10;
	int b = 12;
	int c = a + b;

	cout << a << " + " << b << " = " << c << endl;
}
 ```
	
### Работа с поток за вход от файл (ifstream)
Пример за четене от файл!
 ```c++
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
	ifstream file("myFile.txt");

	if (!file.is_open())
	{
		cout << "Error!" << endl;
		return -1;
	}
	int a, b;

	file >> a >> b;

	file.close();
}
```
Пример за прочитане на цялото съдържание файл:
 ```c++
#include <iostream>
#include <fstream>
using namespace std;

const int BUFF_SIZE = 1024;
int main()
{
	ifstream file("myFile.txt");

	if (!file.is_open())
	{
		cout << "Error!" << endl;
		return -1;
	}
	while (!file.eof())
	{
		char buff[BUFF_SIZE];
		file.getline(buff, BUFF_SIZE);
		
		//do something with the line
		cout << buff<< endl;
	}
	file.close();
}
```
### Работа с поток за изход към файл (ofstream)
   
 ```c++
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	ofstream file("myFile.txt");

	if (!file.is_open())
	{
		cout << "Error!" << endl;
		return -1;
	}
	int a = 3;
	int b = 10;

	file << a << " " << b << " " << a + b << endl;
	
	if(!file.eof()) //check if the file has ended
		cout << "The file contains more data after the two integers!" << endl;

	file.close();
}
 ```

 - ifstream или istream - get указател, който реферира елемента, който ще се прочете при следващата входна операция. 

 - ofstream или ostream - put указател, който реферира мястото, където ще се запише следващият елемент.

### Режими на работа

 ```c++
	ifstream str("file.txt", <режим на работа>).
 ```
Режимът на работа е цяло число. 

| ios         | Ефект:                                                                                                                           |    |
|-------------|----------------------------------------------------------------------------------------------------------------------------------|----|
| ios::in     | Отваря файл за извличане.                                                                                                        | 1  |
| ios::out    | Отваряне на файл за вмъкване. Допуска се вмъкване на произволни места във файла. Ако файлът съществува, съдържанието се изтрива. | 2  |
| ios::ate    | Отваря за вмъкване и установява указателя put в края на файла. Допуска вмъкване на произволни места.                             | 4  |
| ios::app    | Отваря за вмъкване и установява указателя put в края на файла                                                                    | 8  |
| ios::trunc  | Ако файлът съществува, съдържанието се изтрива.                                                                                  | 16 |
| ios::binary | Превключва режима от текстов в двоичен                                                                                           | 32 |
 

 ```c++
	ofstream file("file.txt", ios::out | ios::app).
 ```


 ##  Задачи
 
**Задача 1**: Напишете програма, която отпечатва собствения си код.

**Задача 2**: Напишете функция, която приема име на съществуващ файл и име и копира съдържанието на същестуващия файл в нов файл.

**Задача 3**: Напишете програма,  която чете comma-separated values (**CSV**) файл със студенти **със следните 4 полета**: Първо име, Фамилно име, Стринг на факултетен номер, Имейл
1.  Със стартирането на програмата потребителят да въвежда име на файл, който да бъде зареден в паметта.
2.  Напишете функция, която след зареждане на файла да отпечатва на **стандартния изход** информация за студента при подаден **факултетен номер**.
3.  Напишете функция, която **по подаден факултетен номер, специалност и низ**, променя email-a на студента, който има дадения факултетен номер и учи подадената специалност, с подадения низ.
4.  Напишете функцията , която приема низ (име на файл) и запазва студентите в същия формат (**CSV**). Т.е. при повторно пускане на програмата да може да прочете новия генериран файл.

! Студентите имат уникални факултетни номера, в рамките на една специалност !

Да се реализира прост интерфейс, с който да се извикват написаните фунцкии през конзолата:

**Пример** (входът от потребителя започва с '>'):

 ```
Open file: 
>students.csv
File successfully opened!
>print 123 ComputerScience
Name = Stefan Velkov, Speciality: Computer science Email: stefan@yahoo.com, FN: 123
>edit 123 ComputerScience stecho@abv.bg
>print 123 ComputerScience
Name = Stefan Velkov, Email: stecho@abv.bg, FN: 123
>save students2.csv
file students2.csv successfully saved!
```