Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Программа выводит на экран n-ую строку файла





Программа иллюстрирует чтение данных из файла построчно.

#include<iostream>

#include<locale> //!!! Отвечает за работу с локализацией ОС

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include <stdlib.h>

#include<windows.h>

#include <fstream> // Этот файл обеспечивает работу с файлами

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

ifstream inf; // Объявляем файл для чтения

char name[21]; // имя файла

char str[81]; // строка для чтения данных из файла

do // повторение программы до нажатия клавиши <Esc>

{

cout << "Задайте имя файла ";

cin >> name;

inf.open(name);

if (!inf) // Если файл не открыт

{

cout<<"Файл не найден\n";

}

else

{

int k = 0; // счетчик прочитанных строк

while (!inf.eof()) // пока файл не закончен

{

inf.getline(str,80);

// считываем одну строку файла

k++; // увеличиваем счетчик строк

cout << str << endl;

if ((k+1) % 23 == 0)

// выводим текст на экран по 23 строки

{

cout<< "Нажмите любую клавишу";

_getch(); /* при нажатии любой клавиши выводится очередная часть текста */

}

}

int n; // номер строки, которую нужно вывести на экран

inf.seekg(0L, ios::beg); // возвращаемся в начало файла

inf.clear(); // сбрасываем признак конца файла

do

{

cout<<"Введите номер строки от 1 до "<< k << " ";

cin>>n;

}while (n>k || n<1);

for (int i=1; i<=n; i++)

inf.getline(str,80);

cout<<str<<endl; /* последнюю считанную строку выводим на экран */

}

inf.close(); /* если открытие файла повторяется, значит файл должен закрываться */

} while (_getch()!=27);

return 0;

}

Обратите внимание на то, что чтение файла осуществляется последовательно: чтобы прочитать n-ую строку файла, необходимо прочитать предыдущие (n-1) строк. Это вызвано тем, что строки разной длины и мы не можем определить, где начинается каждая строка. Решением проблемы может быть предварительное чтение файла с записью в массив позиции каждой строки. Работу с массивами мы будем разбирать в следующей лабораторной работе.

4. Программа, которая переписывает текст из одного файла в другой, удаляя лиш­ние пробелы между словами и делая ширину текста максимум 70 символов

Программа иллюстрирует чтение данных из файла словами (словом называется последовательность символов, не содержащая внутри себя пробелов и отделенная от других слов пробелами или пробельными символами типа табуляции). При таком чтении файла все управляющие символы рассматриваются как разделители между словами и деление на строки теряется.

 

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include <stdlib.h>

#include<windows.h>

#include <fstream> // Этот файл обеспечивает работу с файлами

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

ifstream inf("test.txt"); // Объявляем файл для чтения

fstream outf("rez.txt",ios::out);

// создаваемый файл (можно использовать как для записи, так и для чтения)

char str[81]; // строка для чтения нового файла

char slovo[71]; // 1 слово, считываемое из файла

char rez[81]; // строка для записи в новый файл

rez[0] = '\0'; // делаем строку пустой

if (!inf) // если файл не открыт

cout<<"Файл не найден \n";

else

{

byte flag = 0; // признак первого слова

cout << "Исходный файл:\n";

while (!inf.eof()) // пока не конец файла

{

inf >> slovo; // считывем слово из файла

cout<<slovo<< ' '; // выводим его на экран

if (strlen(rez)+strlen(slovo)+1<=70 && strlen(slovo))

/* если длина строки после добавления к ней нового слова не превысит 70 и слово не пустое */

{

if (flag) strcat(rez," ");

// если слово - не первое, добавляем пробел


strcat(rez,slovo); // добавляем слово

flag = 1; // в строке уже есть слово

}

else // если строка уже длинная

{

outf << rez << endl; // записываем ее в файл

*rez = '\0'; // строку делаем опять пустой

strcpy(rez,slovo); // копируем в нее слово

}

} //end while

if (*rez) outf << rez << endl;

// если последняя строка – не пустая, записываем ее в файл

outf.close(); // создаваемые файлы нужно закрывать

cout <<"\n\nНажмите любую клавишу \n";

_getch();

outf.open("rez.txt",ios::in);

// открываем созданный файл для чтения

cout << "\nНовый файл:\n";

while(!outf.eof()) // пока не конец файла

{

outf.getline(str,80); // считываем строку

cout << str << endl; // выводим ее на экран

}

}

_getch();

return 0;

}

5. Программа, которая считывает текст файла и создает новый файл, заменив во всем тексте заданное слово на новое (не изменяя деление на строки и коли­чес­т­во пробелов между словами)

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

#include<fstream> // Этот файл обеспечивает работу с файлами

using namespace std;

// Функция, которая будет выполнять команду “Заменить”

void Replace (char*& str, char* olds,char *news)

/* параметрами функции являются ссылка на указатель, который хранит адрес строки, слово, которое нужно заменить, и новое слово.

Функция будет изменять указатель (адрес строки) */

{

char* rez = new char[2*strlen(str)];

/* новая строка; длина строки может увеличиться в результате замены, поэтому выделим память в 2 раза больше, чем длина исходной строки */

unsigned char slovo[31]; // 1 слово из строки

unsigned char *s = reinterpret_cast<unsigned char*>(str), *r = reinterpret_cast<unsigned char*>(rez), *sl; /* указатели, с помощью которых мы будем двигаться по строке и обрабатывать символ за символом */

while (*s) // пока не достигнут конец строки

{

sl = slovo;

// устанавливаем указатель sl на область памяти для хранения слова

while (*s > 0 && *s <= ' ') *r++ = *s++;

// Скопировали в результирующую строку пробелы

while (*s > ' ' && *s < 1<<8) *sl++ = *s++;

// Скопировали слово

*sl = '\0'; // записали признак конца слова

if (strcmp(reinterpret_cast<char*>(slovo), olds))

// Если очередное слово не нужно заменять

sl = slovo;

// устанавливаем указатель sl на считанное слово

else

sl = reinterpret_cast<unsigned char*>(news);

// иначе на новое слово

while (*sl) *r++ = *sl++;

// копируем то или иное слово в результирующую строку

}

*r = '\0'; // записываем признак конца строки

delete []str; // удаляем из памяти старую строку

str = rez; // теперь указатель str хранит адрес новой строки

}

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

ifstream inf("test.txt"); // Объявляем файл для чтения


fstream outf("rez.txt",ios::out);

char* str = new char[81]; // строка для чтения файла

if (!inf)

cout<<"Файл не найден \n";

else

{

while (!inf.eof()) // пока не конец файла

{

inf.getline(str,80); // считываем строку

cout<<str<<endl; // выводим ее на экран

Replace(str, "$$", "???");

// заменяем одно слово на другое

outf << str << endl; // записываем новую строку в файл

}

outf.close(); // созданный файл закрываем

// выводим полученный файл на экран:

outf.open("rez.txt", ios::in);

cout << "\nНовый файл:\n";

while(!outf.eof())

{

outf.getline(str,81);

cout<<str<<endl;

}

}

delete str;

_getch();

return 0;

}

 







Date: 2016-08-30; view: 473; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.022 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию