Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |