Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Извлекает из потока символ и помещает его в ch. Функция возвращает ссылку на текущий поток




get(buf, num, lim='\n')

считывает num-1 символов (или пока не встретится символ lim) в буфер, адрес которого содержится в параметре buf типа char *, формирует нуль-терминированную строку, оставляет lim в потоке. Функция возвращает ссылку на текущий поток.

getline(buf, num, lim='\n')
то же, но символ lim извлекается из потока.
read(buf, num)
считывает num символов в буфер, адрес которого содержится в параметре buf типа char *. Функция возвращает ссылку на текущий поток.
readsome(buf, num)
то же, но возвращает действительное количество прочитанных символов.
ignore(num=1, lim=EOF)
пропускает либо num символов из потока, либо символы до тех пор, пока не встретится символ-ограничитель lim.
peek()
возвращает текущий символ потока (или EOF) без его удаления из потока.
putback(ch)
помещает в поток символ ch. Этот символ становится текущим.
tellg()
возвращает текущую позицию чтения потока.
seekg(pos)
задает новое значение pos для текущей позиции чтения потока.
seekg(offs, org)
перемещает текущую позицию чтения потока на величину offs относительно org. Допустимые значения для org: ios::beg, ios::end, ios::cur.

Методы класса ostream

put(ch)
помещает в поток символ ch.
write(buf, num)

помещает в поток num символов из буфера, адрес которого содержится в параметре buf типа char *. Функция возвращает ссылку на текущий поток.
tellg()
seekg(pos)
seekg(offs, org)
аналогичны функциям класса istream, но работают с текущей позицией записи в поток.
flush()
принудительно сбрасывает буфера и выводит их содержимое на физическое устройство.

Особенности работы с файловыми потоками
Создание файлового потока:


ifstream(const char *имяфайла, [ int режим =ios::in ])
ofstream(const char * имяфайла,
[ int режим =ios::out | ios::trunc ])
fstream(const char * имяфайла,
[ int режим =ios::out | ios::in ])

Эти конструкторы одновременно с созданием потокового объекта открывают соответствующий файл. Метод open с такими же параметрами открывает файл после того, как поток уже определен.
Закрытие файла, связанного с потоком, выполняется либо при уничтожении объекта-потока во время работы деструктора, либо с помощью вызова метода close.
Параметр «метод», задаваемый при открытии потока, представляет собой комбинацию из следующих констант – битовых масок, описанных в классе ios:
in -поток открывается для чтения
out -поток открывается для записи
ate -указатель текущей записи устанавливается на конец файла
app -поток открывается для добавления в конец
trunс -удалить существующий файл
nocreate -выдать ошибку, если файл не существует (только при использовании iostream.h)
noreplace -выдать ошибку, если файл существует (только при использовании iostream.h)
binary -открыть файл в двоичном режиме

Обработка состояния потока
В процессе работы с потоком могут возникнуть различные ситуации. Для этих целей в классе ios определено поле state, которое представляет собой комбинацию из следующих битовых масок:
eofbit -достигнут конец файла
failbit -ошибка при форматировании
hardfail -неисправность оборудования
badbit -прочая серьезная ошибка

Для обработки состояния потока можно использовать следующие методы:
int rdstate() -возвращает информацию о состоянии потока
int eof() -возвращает ненулевое значение, если установлен флаг eofbit
int good() -возвращает ненулевое значение, если не установлены флаги состояния
void clear(int= 0) -устанавливает новое значение состояния потока
int fail() -возвращает ненулевое значение, если последняя операция завершилась неудачно (например, пытались прочитать число, а в потоке была буква) Возможно восстановление
int bad() -возвращает ненулевое значение, если последняя операция завершилась неудачно и причины серьезные, восстановление не возможно (например, при чтении произошел аппаратный сбой)

Кроме того, для удобства работы с потоком переопределены оператор! и оператор приведения потока к типу void *. Последний оператор вызывается каждый раз при сравнении потока с нулевым значением (т.е. с 0, NULL или false) и возвращает NULL, если функция fail() возвратила ненулевое значение. Соответственно, переопределенный оператор! возвращает false, если поле state равно нулю. Этим фактом воспользуемся далее в примерах, записывая строки типа
while (f.getline(S, 101)!= NULL)

Пример 20.1 . Файл in1.txt содержит строки длиной не более 100 символов.
Требуется посчитать в этом файле число строк, начинающихся с пробела.

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

int main()
{int N = 0;
char *S = new char[101];
ifstream f("in1.txt");
while (f.getline(S,101)!= NULL)
if (S[0] == ' ’) N++;
cout << N << endl;
delete [] S;
return 0;}

Пример 20.2. // Переписать все непустые строки из файла in1.txt, описанного в предыдущем примере, в выходной текстовый файл out1.txt
int main() {
char *S = new char[101];
ifstream f2("in1.txt");
ofstream f1("out1.txt");
while (f2.getline(S,101)!= NULL)
if (S[0]!= '\0')
{
f1.write(S, strlen(S));
f1.put('\n');
//или иначе f1<<S<<”\n”;
}
delete [] S;

return 0;

}

 

Пример 20.3. Строки текстового файла in4.txt состоят из слов, разделенных одним или несколькими пробелами. Длина слова не превышает 100 символов. Cлова, которые начинаются с цифры, представляют собой десятичную запись натуральных чисел.
Найти максимальное число, записанное в файле.

int main ()
{
char *S = new char[101];
char C;
long max=-1, curr;

fstream f4("in4.txt");
while (f4 >> S)
{
C=S[0];
if (isdigit(C))
{
curr=atoi(S);
if (curr > max)
max=curr;
}
}

if (max == -1)
cout << " No numbers entered” << endl;
else
cout << max << endl;
delete [] S;
return 0;

}





Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 498; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.