Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2011, 12:01   #1
Vivazz
Пользователь
 
Регистрация: 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();
}
Vivazz вне форума Ответить с цитированием
Старый 18.02.2011, 12:34   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну вы и намешали...
Код:
#include <vcl.h>
в топку. VCL - это Visual Component Library, в консольных проектах она нужна как собаке пятая нога.
Впрочем, там же еще куча лишних заголовков (а stdio вообще дважды подключен).
Опять же - зачем вам FILE, когда используете потоки? Да еще и потоки с одинаковыми именами...
В общем, код отлаживать (в данном случае - избавлять от лажи) можно долго и старательно.
А я бы для записи-чтения сделал бы что-то вроде:
Код:
#include <fstream>
#include <iostream>

int main()
{
std::ifstream input("file1.txt");
std::ofstream output("file2.txt");
std::string line;
while (!input.eof())
 {
 getline(input, line);
 std::cout << line << std::endl;
 output << line << std::endl;
 }
std::cin.ignore();
std::cin.get();
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 18.02.2011, 12:49   #3
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

Я в функциях текстовых не силен, какие нашел и посмотрел как работают, на счет инклудов у меня так среда разработки их добавляет, так же у меня не просто MAIN. а _tmain. #include <stdio.h> по запарке дважды подключил. Что такое std? и что такое std::cin.ignore(); std::cin.get(); ? А что на счет проверки текста и замене на другие слова? как это осуществить
Vivazz вне форума Ответить с цитированием
Старый 18.02.2011, 12:53   #4
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

Так же у меня компилятор заругался на неопознанную функцию getline
Vivazz вне форума Ответить с цитированием
Старый 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
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

А что делать с getline ? А то не запускается пример, приведенный вами.
Вместо get() я обычно использую getch(); поэтому не знал)
Vivazz вне форума Ответить с цитированием
Старый 18.02.2011, 13:21   #7
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

Прочитал про пространство имен. Думаю данная программа не будет такой обширной, чтобы не хватило уникальных имен.
Vivazz вне форума Ответить с цитированием
Старый 18.02.2011, 14:22   #8
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

Переделал я ваш код, в итоге у меня скомпилился файлик. Сам код:
Код:
int main()
{
	ifstream input_file("file.txt");
	ofstream output_file("file2.txt");
	char name[255];
	while(!input_file.eof())
	{
		input_file.getline(name,sizeof(name));
		cout<< name <<endl;
		output_file << name << endl;
	}
	system("pause");
}
Vivazz вне форума Ответить с цитированием
Старый 18.02.2011, 14:25   #9
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

Подскажите теперь как осуществить проверку слов в текстовом файлике. Такого никогда не делал и в голову алгоритм не приходит.
Vivazz вне форума Ответить с цитированием
Старый 18.02.2011, 15:26   #10
Vivazz
Пользователь
 
Регистрация: 18.02.2011
Сообщений: 11
По умолчанию

Я практически сделал то, то хотел, только есть проблема, из текста программа обрабатывает только символы. а не слова. Правда работаю с файлами,а не с потоками, так как не знаю как обрабатывать слова в потоке.
Vivazz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлом. Pascaler Помощь студентам 2 27.05.2010 20:46
Работа с файлом Leoman Помощь студентам 0 02.04.2010 21:57
работа с файлом lg12 Помощь студентам 7 24.08.2009 08:33