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), запазване на резултати от игри и тестове.
- Предимства: четим е с всеки редактор, лесен е за създаване и преносим между системи.
- Недостатъци: заема повече място от двоичен файл, а числата се преобразуват от и към текст. Търсенето изисква последователно четене.
- Грешки при отваряне: неправилно име или път, липсващ файл, липса на права за достъп.
- Грешки при работа: забравено затваряне на файла и случайно изтриване на данни при запис вместо добавяне.
Изготвил: Цветелин Борисов