Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
1

Функция считывания из файла для map

04.03.2010, 17:28. Просмотров 1948. Ответов 9
Метки нет (Все метки)

в файле задана последовательность ключ-точка(map<string,MYPOINT>). Помогите, пожалуйста, написать функцию считывания из файла, а то везде есть функция только для записи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2010, 17:28
Ответы с готовыми решениями:

Функция для считывания символа из файла в переменную wchar_t
Вот такой вот в общем код. Какой функцией можно считывать посимвольно символы...

Есть ли в С++ функция для считывания информации с файла с подробной настройкой?
Есть ли в С++ функция для считывания информации с файла с подробной...

Функция считывания слов с текстового файла
Доброго времени суток!) Задача такова: Считать из текстового файла слова в...

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

Функция seekq, вместо повторного считывания файла (txt)
Всем привет, ребят. Я тут новый и это мой первый пост :) И вопрос у меня вот...

9
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
04.03.2010, 17:30 2
Приведи эту функцию. Функция считывания будет очень-очень похожей.
0
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:32  [ТС] 3
C++
1
2
3
4
void SaveObj(fstream &outFile){
   for(map < string, MYPOINT> :: iterator i = arrObj.begin(); i != arrObj.end(); i++)
      outFile<< i -> first << ' ' << i -> second;
}
но при считывании с файла мы же должны использовать буфер, так?
0
easybudda
Модератор
Эксперт CЭксперт С++
10146 / 6053 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
04.03.2010, 17:34 4
fallti, пример входных данных приведите...
0
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 17:39  [ТС] 5
театр х у
большой 0 0
средний 6 8
малый 11 7

Добавлено через 1 минуту
для точки написана структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#pragma once
 
#include <iostream>
using namespace std;
struct MYPOINT{
    int x,y;
    MYPOINT():x(0),y(0){}
    MYPOINT(int nX,int nY):x(nX),y(nY){}
    MYPOINT(const MYPOINT &cop):x(cop.x),y(cop.y){}
    friend istream &operator>>(istream &input,MYPOINT &op){
        input>>op.x>>op.y;
        return input;
    }
    friend ostream &operator<<(ostream &output,MYPOINT &op){
        output<<op.x<<op.y;
        return output;
    }   
};
0
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
04.03.2010, 18:24 6
Тогда где-то так (не проверял!):
C++
1
2
3
4
5
6
7
8
void LoadObj(ifstream &inFile, map<string, MYPOINT> &dest){
   while(!inFile.eof()) {
      string key;
      MYPOINT pt;
      inFile >> key >> pt;
      dest[key] = pt;
   }
}
1
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 18:46  [ТС] 7
Спасибо, я даже и не думал, что можно на столько просто сделать...
0
easybudda
Модератор
Эксперт CЭксперт С++
10146 / 6053 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
04.03.2010, 18:52 8
fallti, вот, чё получилось
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <fstream>
#include <string>
#include <map>
 
struct Point {
    int x;
    int y;
};
 
class Buf {
public:
    Buf() {}
    ~Buf() {}
    bool addToMap(std::map<std::string, Point>& m){
        std::pair<std::map<std::string, Point>::iterator, bool> im;
        im = m.insert(std::pair<std::string, Point>(name, pt));
        return im.second;
    }
    friend std::istream& operator >> (std::istream& ist, Buf& b){
        ist >> b.name >> b.pt.x >> b.pt.y;
        return ist;
    }
 
private:
    std::string name;
    Point pt;
};
 
int main(){
    const char* file_name = "teatr.txt";
    std::string tmp;
    std::map<std::string, Point> arr;
    std::ifstream ifs(file_name);
    if ( !ifs.is_open() ){
        std::cerr << "Can't open input file" << std::endl;
        return 1;
    }
    // пропустить первую строку
    std::getline(ifs, tmp);
    Buf buf;
    while ( ifs >> buf){
        if ( !buf.addToMap(arr) ){
            std::cerr << "Error adding elements" << std::endl;
            return 1;
        }
    }
    ifs.close();
 
    for ( std::map<std::string, Point>::const_iterator i = arr.begin(); i != arr.end(); ++i )
        std::cout << i->first << ' ' << i->second.x << ' ' << i->second.y << std::endl;
 
    return 0;
}
Но у CheshireCat красивше, не спорю
1
fallti
0 / 0 / 0
Регистрация: 04.03.2010
Сообщений: 18
04.03.2010, 19:08  [ТС] 9
спасибо, тоже очень благодарен
0
easybudda
Модератор
Эксперт CЭксперт С++
10146 / 6053 / 1521
Регистрация: 25.07.2009
Сообщений: 11,476
04.03.2010, 19:26 10
Цитата Сообщение от CheshireCat Посмотреть сообщение
Тогда где-то так (не проверял!):
Тут, кстати, вот из этой темы подводный камень скрывается в плане организации цикла считывания из файла...
0
04.03.2010, 19:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2010, 19:26

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

Функция для считывания строки
Требуется написать функция для считывания строки, используя динамическое...

Функция для считывания нажатых клавиш.
Подскажите какую нибудь функцию которая бы считывала все нажатия клавиш?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru