Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 02
NameSize
..
README.md3.8 KiBlog stats plain blame
notes_02.pdf74.0 KiBlog stats plain blame
task148 Blog stats plain
task288 Blog stats plain

Потоци и Файлове (част 1). Текстови файлове.

Видове потоци: - Потоци за вход (istream). - Потоци за изход (ostream).

enter image description here

Пример за работа с вход от конзолата. 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! ```