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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 21:07   #1
Sektr63
Пользователь
 
Регистрация: 29.01.2012
Сообщений: 33
Радость Чтение из файла

Знаю, что есть куча подобных тем, но толком и не понял, как производится чтение с файла, прошу дать самый простой пример
Sektr63 вне форума Ответить с цитированием
Старый 27.02.2012, 21:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://www.programmersforum.ru/showthread.php?t=113151
Сравнение файлов
http://www.programmersforum.ru/showthread.php?t=105501
База данных
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.02.2012, 19:25   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Код:
#include <conio.h>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
int main()
{

        FILE *f1,*f2;//2 файла
        char nameIn[20];//имя файла1(длина)
        char nameOut[20];//имя файла2(длина)
        char str[100] ;//строка в файле
        int size;//переменная
        printf("Vvedite imy faila: ");   //спрашиваешь имя
        scanf("%s",nameIn);       //считываешь имя
        f1 = fopen(nameIn,"r");//открываем файл 1
        while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
        {
              printf("\tError!\n");
              printf("Vvedite imy faila: ");   //спрашиваешь имя
              scanf("%s",nameIn);       //считываешь имя
              f1 = fopen(nameIn,"r");//открытие файла1
        }
        size = filelength(fileno(f1));//получаем размер файла
        int readsize = fread(str,sizeof(char),sizeof(char)*size,f1);//читают строку из файла по символам.в переменную readsize записывается размер
        for(int i=0;i<readsize;i++)//цикл замены букв в строке из файла
        {
                        if( str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')//происходит замена букв
                                 {
                                 str[i] = 'd';
                                 str[i+1] = 'e';
                                 str[i+2] = 'f';
                                 }
        }
        printf("Vvedite imy vihodnogo faila: ");   //спрашиваешь имя
        scanf("%s",nameOut);       //считываешь имя
        f2 = fopen(nameOut,"w");//открытие файла2
        printf("\n");
        printf("\tRezultat izmeneniy: \n");
        for(int i=0;i<readsize;i++)//цикл показа результата на экране монитора
        {
                printf("%c",str[i]);
                fprintf(f2,"%c",str[i]);
        }
        fclose(f2);//закрытие файла2
        fclose(f1);//закрытие файла1
getch() ;
}
В качестве примера исходник,который я сдал когда то,там и чтение и запись в файл
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 28.02.2012, 23:16   #4
Karmadon
Пользователь
 
Аватар для Karmadon
 
Регистрация: 28.02.2012
Сообщений: 46
По умолчанию

Простой и удобно расширяемый пример чтения файла настроек
простите что без коментов.
Не мое творение, но работает неплохо

Код:
#include <iostream>
#include <string>
#include <sstream>
#include <map>
#include <fstream>

using namespace std;

class Convert
{
public:
	template <typename T>
	static string T_to_string(T const &val) 
	{
		ostringstream ostr;
		ostr << val;

		return ostr.str();
	}
		
	template <typename T>
	static T string_to_T(string const &val) 
	{
		istringstream istr(val);
		T returnVal;
		if (!(istr >> returnVal))
			exitWithError("CFG: Not a valid " + (string)typeid(T).name() + " received!\n");

		return returnVal;
	}

	template <>
	static string string_to_T(string const &val)
	{
		return val;
	}
};

void exitWithError(const string &error) 
{
	cout << error;
	cin.ignore();
	cin.get();

	exit(EXIT_FAILURE);
}

class ConfigFile
{
private:
	map<string, string> contents;
	string fName;

	void removeComment(string &line) const
	{
		if (line.find(';') != line.npos)
			line.erase(line.find(';'));
	}

	bool onlyWhitespace(const string &line) const
	{
		return (line.find_first_not_of(' ') == line.npos);
	}
	bool validLine(const string &line) const
	{
		string temp = line;
		temp.erase(0, temp.find_first_not_of("\t "));
		if (temp[0] == '=')
			return false;

		for (size_t i = temp.find('=') + 1; i < temp.length(); i++)
			if (temp[i] != ' ')
				return true;

		return false;
	}

	void extractKey(string &key, size_t const &sepPos, const string &line) const
	{
		key = line.substr(0, sepPos);
		if (key.find('\t') != line.npos || key.find(' ') != line.npos)
			key.erase(key.find_first_of("\t "));
	}
	void extractValue(string &value, size_t const &sepPos, const string &line) const
	{
		value = line.substr(sepPos + 1);
		value.erase(0, value.find_first_not_of("\t "));
		value.erase(value.find_last_not_of("\t ") + 1);
	}

	void extractContents(const string &line) 
	{
		string temp = line;
		temp.erase(0, temp.find_first_not_of("\t "));
		size_t sepPos = temp.find('=');

		string key, value;
		extractKey(key, sepPos, temp);
		extractValue(value, sepPos, temp);

		if (!keyExists(key))
			contents.insert(pair<string, string>(key, value));
		else
			exitWithError("CFG: Can only have unique key names!\n");
	}

	void parseLine(const string &line, size_t const lineNo)
	{
		if (line.find('=') == line.npos)
			exitWithError("CFG: Couldn't find separator on line: " + Convert::T_to_string(lineNo) + "\n");

		if (!validLine(line))
			exitWithError("CFG: Bad format for line: " + Convert::T_to_string(lineNo) + "\n");

		extractContents(line);
	}

	void ExtractKeys()
	{
		ifstream file;
		file.open(fName.c_str());
		if (!file)
			exitWithError("CFG: File " + fName + " couldn't be found!\n");

		string line;
		size_t lineNo = 0;
		while (getline(file, line))
		{
			lineNo++;
			string temp = line;

			if (temp.empty())
				continue;

			removeComment(temp);
			if (onlyWhitespace(temp))
				continue;

			parseLine(temp, lineNo);
		}

		file.close();
	}
public:
	ConfigFile(const string &fName)
	{
		this->fName = fName;
		ExtractKeys();
	}

	bool keyExists(const string &key) const
	{
		return contents.find(key) != contents.end();
	}

	template <typename ValueType>
	ValueType getValueOfKey(const string &key, ValueType const &defaultValue = ValueType()) const
	{
		if (!keyExists(key))
			return defaultValue;

		return Convert::string_to_T<ValueType>(contents.find(key)->second);
	}
};

int main()
{
	ConfigFile cfg("config.cfg");

	bool exists = cfg.keyExists("car");
	cout << "car key: " << boolalpha << exists << "\n";
	exists = cfg.keyExists("fruits");
	cout << "fruits key: " << exists << "\n";

	string someValue = cfg.getValueOfKey<string>("mykey", "Unknown");
	cout << "value of key mykey: " << someValue << "\n";
	string carValue = cfg.getValueOfKey<string>("car");
	cout << "value of key car: " << carValue << "\n";
	double doubleVal = cfg.getValueOfKey<double>("double");
	cout << "value of key double: " << doubleVal << "\n\n";

	cin.get();
	return 0;
}
"THE ONLY WAY TO GET SMARTER IS BY PLAYING A SMARTER OPPONENT." -- Fundamentals of Chess 1883

Последний раз редактировалось Karmadon; 28.02.2012 в 23:17. Причина: исправления
Karmadon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение XM файла IvanSCM Свободное общение 1 08.11.2011 18:27
Чтение из файла kop Помощь студентам 2 30.01.2011 01:58
Чтение файла lapo4ka1368 Общие вопросы C/C++ 0 07.04.2010 17:15
Чтение из файла utrnjhyfgjktjy Помощь студентам 9 30.01.2010 17:41
Чтение из файла Need_Help Паскаль, Turbo Pascal, PascalABC.NET 5 19.05.2007 05:37