| Name | Size | |
|---|---|---|
| .. | ||
| README.md | 3.8 KiB | log stats plain blame |
| notes_02.pdf | 74.0 KiB | log stats plain blame |
| task1 | 48 B | log stats plain |
| task2 | 88 B | log stats plain |
Потоци и Файлове (част 1). Текстови файлове.
Видове потоци: - Потоци за вход (istream). - Потоци за изход (ostream).

Пример за работа с вход от конзолата. cin (обект от тип istream).
```c++
include
using namespace std;
int main() { int a, b; cin >> a >> b; } ``` Четем от стандартния вход.
Пример за работа с поток за изход. cout (обект от тип ostream).
```c++
include
using namespace std;
int main() { int a = 10; int b = 12; int c = a + b;
cout << a << " + " << b << " = " << c << endl;
} ```
Работа с поток за вход от файл (ifstream)
Пример за четене от файл! ```c++
include
include
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
include
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! ```
