ОбразованиеУчи по-лесно.
Назад към темите

Тема: Текстови файлове.

1. Понятие и характеристики на текстовия файл

Текстовият файл съхранява данни като последователност от символи, разделени на редове. Съдържанието му може да се прочете и редактира с обикновен текстов редактор. Програмата получава данните като текст и при нужда ги преобразува в числа.

  • Съдържание: букви, цифри, интервали, препинателни знаци и символ за край на ред.
  • Кодиране: правилото, по което символите се записват като байтове (ASCII, UTF-8). Грешно кодиране води до нечетим текст, например при кирилица.
  • Структура: данните са подредени ред по ред, а в реда са разделени с интервал, запетая или точка и запетая.
  • Разширения: .txt (обикновен текст), .csv (таблични данни), .log (журнал на събития), .ini (настройки).

2. Работа с текстов файл в програма

Всяка работа с файл следва три стъпки: отваряне, четене или запис и затваряне. Преди обработка програмата трябва да провери дали файлът е отворен успешно. Примерите са на C++ с библиотеката fstream.

  • Режим за четене (ifstream): файлът трябва да съществува, а данните само се четат.
  • Режим за запис (ofstream): ако файлът съществува, старото му съдържание се изтрива. Ако не съществува, се създава нов.
  • Режим за добавяне (ios::app): новите данни се записват в края, без да се губи старото съдържание.
  • Четене: операторът >> чете дума или число до интервал, а getline() чете цял ред.
  • Край на файла: четенето в цикъл спира, когато операцията за четене не успее, т.е. няма повече данни.

Пример

Програмата записва два продукта с цени във файл, след което ги прочита и намира сумата.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    ofstream out("products.txt");
    if (!out) {
        cout << "Error: cannot open file";
        return 1;
    }
    out << "milk 2.50" << endl;
    out << "bread 1.20" << endl;
    out.close();

    ifstream in("products.txt");
    string name;
    double price, sum = 0;
    while (in >> name >> price) {
        cout << name << ": " << price << endl;
        sum += price;
    }
    in.close();
    cout << "Total: " << sum;
    return 0;
}

Резултат:

milk: 2.5
bread: 1.2
Total: 3.7

Първо ofstream създава файла и записва по един продукт на ред. След това ifstream чете името и цената от всеки ред, докато има данни. Накрая двата файлови потока се затварят.

3. Приложение и типични грешки

Текстовите файлове се използват за данни, които трябва да се запазват между стартиранията на програмата или да се обменят между различни програми. Те са прости и четими, но са неудобни за големи обеми и за бързо търсене.

  • Приложения: конфигурационни файлове, лог файлове на приложения, експорт и импорт на таблици (CSV), запазване на резултати от игри и тестове.
  • Предимства: четим е с всеки редактор, лесен е за създаване и преносим между системи.
  • Недостатъци: заема повече място от двоичен файл, а числата се преобразуват от и към текст. Търсенето изисква последователно четене.
  • Грешки при отваряне: неправилно име или път, липсващ файл, липса на права за достъп.
  • Грешки при работа: забравено затваряне на файла и случайно изтриване на данни при запис вместо добавяне.

Изготвил: Цветелин Борисов