|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.02.2011, 12:01 | #1 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Интересная работа с файлом
Здравствуйте уважаемые посетители данного форума. Перед собой я поставил интересную задачу и хотел бы ее реализовать, но пока этого не получается. Смыл задачи такой: Есть допустим файл file.txt мне нужно считать с него данные, но не просто считать а еще и обработать их, поясню, допустим в файле записано:
-------------- begin Vasya Pupkin end -------------- И мне нужно, чтобы вместо Vasya Pupkin программа заменила и записала в новый файл (предварительно его создав, допустим file2.txt) такой текст: -------------- begin Ya ne Pupkin end -------------- То, что не проходит фильтр, а именно слова begin и end записываются как и было в исходном текстовом файле. В данный момент сделал чтение из файла, создание файла и запись в него, и то запись происходит в строку(Пример: beginVasyaPupkinend), а нужно так, как и исходный текст(с новой строки и с отступами). Раньше с текстовыми документами особо не возился. Прошу помощи не только на словах, но и с примерами функций и как они работают. Код HTML:
#include <vcl.h> #pragma hdrstop #include <tchar.h> #pragma argsused #include <stdio.h> #include <iostream> #include <fstream> #include <string.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { FILE *file; char* file_name = "file2.txt"; file = fopen( file_name, "w" ); ifstream input_file("file.txt"); ofstream input_file("file2.txt"); char word[64] ; while (! input_file.eof()) { input_file >> word; cout << word << endl; fputs( word, file ); } fclose( file ); getch(); } |
18.02.2011, 12:34 | #2 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Ну вы и намешали...
Код:
Впрочем, там же еще куча лишних заголовков (а stdio вообще дважды подключен). Опять же - зачем вам FILE, когда используете потоки? Да еще и потоки с одинаковыми именами... В общем, код отлаживать (в данном случае - избавлять от лажи) можно долго и старательно. А я бы для записи-чтения сделал бы что-то вроде: Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
18.02.2011, 12:49 | #3 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Я в функциях текстовых не силен, какие нашел и посмотрел как работают, на счет инклудов у меня так среда разработки их добавляет, так же у меня не просто MAIN. а _tmain. #include <stdio.h> по запарке дважды подключил. Что такое std? и что такое std::cin.ignore(); std::cin.get(); ? А что на счет проверки текста и замене на другие слова? как это осуществить
|
18.02.2011, 12:53 | #4 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Так же у меня компилятор заругался на неопознанную функцию getline
|
18.02.2011, 13:05 | #5 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
_tmain - это расширение от MS. В стандарте есть только int main. (Согласно информации из сети, _tmain - это макрос (?), автоматически выбирающий между стандартным int main(int argc, char* argv[]) и Microsoft'ским же int wmain(int argc, wchar_t* argv[])). Я бы советовал использовать то, что есть в стандарте, т.е. main, если только нет особой необходимости поступать иначе. И header'ы подключать только те, которые нужно, а не те, которые среда захочет.
std - это пространство имен стандратной библиотеки C++ (думаю, вам стоит про нее хотя бы почитать немного). Функция get() дожидается ввода строки с последующим нажатием Enter. В данном случае это делается для того, чтобы перед тем, как программа закрылась, программа дождалась нажатия Enter (будут ли нажаты до этого другие клавиши - нам безразлично). Вызов же ignore перед этим нужен на тот случай, если в потоке ввода (std::cin) остались несчитанные символы. Если они там есть, то функция get может считать их, а не те, которые окажутся в потоке вследствие нажатия клавиш на клавиатуре. Поэтому функция ignore очищает поток cin, и после этого символы, доступные для считывания get там появятся только после того, как пользователь что-то наберет на клавиатуре. Вообще, думаю, вам стоит почитать про стандартные строки, потоки, и т.п.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
18.02.2011, 13:15 | #6 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
А что делать с getline ? А то не запускается пример, приведенный вами.
Вместо get() я обычно использую getch(); поэтому не знал) |
18.02.2011, 13:21 | #7 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Прочитал про пространство имен. Думаю данная программа не будет такой обширной, чтобы не хватило уникальных имен.
|
18.02.2011, 14:22 | #8 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Переделал я ваш код, в итоге у меня скомпилился файлик. Сам код:
Код:
|
18.02.2011, 14:25 | #9 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Подскажите теперь как осуществить проверку слов в текстовом файлике. Такого никогда не делал и в голову алгоритм не приходит.
|
18.02.2011, 15:26 | #10 |
Пользователь
Регистрация: 18.02.2011
Сообщений: 11
|
Я практически сделал то, то хотел, только есть проблема, из текста программа обрабатывает только символы. а не слова. Правда работаю с файлами,а не с потоками, так как не знаю как обрабатывать слова в потоке.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с файлом. | Pascaler | Помощь студентам | 2 | 27.05.2010 20:46 |
Работа с файлом | Leoman | Помощь студентам | 0 | 02.04.2010 21:57 |
работа с файлом | lg12 | Помощь студентам | 7 | 24.08.2009 08:33 |