Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Работа с текстовыми файлами, помогите создать статическую библиотеку для приложения MFC
Skyler
Вставить ник
сообщение 23:04:2008, 17:47
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 11
Регистрация: 5:03:2008
Из: Киев
Пользователь №: 15 681



Репутация: - 0 +


Здравствуйте, уважаемые господа!
Прежде всего хочу выразить всем огромную благодарность за оказанную мне, как новичку, помощь!
За время пребывания на форуме я у вас много чему научился, но "текущую" проблему решить не могу sad.gif
Вобщем мне нужно предоставить пользователю возможность выбора в программе некоторой стандартной продукции (к примеру, силовые электрические кабеля) программа должна "знать" их маркировку, технические характеристики и т.д. (двумерная таблица с несколькими столбцами). Когда я "писал" на VB, я просто "забивал" все в текстовые документы и потом, при запуске, программа считывала данные из этих файлов и "фасовала" их по соответствующим массивам.
Подскажите пожалуйста как разрешить эту проблему в MFC. Заранее благодарен!
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 16)
sax_ol
Вставить ник
сообщение 23:04:2008, 17:53
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 2 064
Регистрация: 11:01:2007
Пользователь №: 8 750



Репутация: - 28 +


Цитата(Skyler @ 23:04:2008 - 19:47) *
Подскажите пожалуйста как разрешить эту проблему в MFC.
Тут только XML спасает.
Подняться вверх 
 
Сообщение #2
Skyler
Вставить ник
сообщение 23:04:2008, 18:40
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 11
Регистрация: 5:03:2008
Из: Киев
Пользователь №: 15 681



Репутация: - 0 +


это очень плохо, так-как на изучение XML у меня просто не хватит времени... ohmy.gif а мож хоть как-нибудь, данные даже не нужно динамически изменять или добавлять... wacko.gif хоть возьми да пропиши все прайсы в коде... smile.gif
Подняться вверх 
 
Сообщение #3
gamecreator
Вставить ник
сообщение 23:04:2008, 20:55
Цитата Ответить 


Гуру
***

Группа: Достойный программист
Сообщений: 316
Регистрация: 3:11:2007
Пользователь №: 13 517



Репутация: - 1 +


а почему аналогичный подход, описанный для бейсика не подходит для С++?
Подняться вверх 
 
Сообщение #4
Skyler
Вставить ник
сообщение 24:04:2008, 15:58
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 11
Регистрация: 5:03:2008
Из: Киев
Пользователь №: 15 681



Репутация: - 0 +


программа (пишет/читает) свои собственные документы посредством сериализации. файлы ж этой "базы данных" должны иметь иную структуру. возможно ли их сериализировать и как - я не знаю. в бейсике эти данные я писал в блокноте, а программа их читала в формате String (по-моему ф-ция ReadLine). как это сделать в MFC я, увы, тож не знаю sad.gif
Подняться вверх 
 
Сообщение #5
European
Вставить ник
сообщение 25:04:2008, 06:39
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 937
Регистрация: 4:09:2006
Из: Минск
Пользователь №: 6 316



Репутация: - 32 +


Цитата(Skyler @ 24:04:2008 - 17:58) *
файлы ж этой "базы данных" должны иметь иную структуру. возможно ли их сериализировать и как

Расскажите подробнее про структуру, может поможем
Подняться вверх 
 
Сообщение #6
Skyler
Вставить ник
сообщение 25:04:2008, 13:44
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 11
Регистрация: 5:03:2008
Из: Киев
Пользователь №: 15 681



Репутация: - 0 +


в этих файлах должны быть данные о продукции. покажу пример на тех же силовых кабелях:
марка кабеля: ААшВ;
номинальное сечение= 35;
придельный ток= 200;
удельное электрическое сопротивление=0,035;
...
цена=5200.
Программа должна предоставить пользователю выбрать марку кабеля, например, из списка, а остальные характеристики "подтянуть" для дальнейших расчетов. мне нужно узнать как можно читать ети данные из файлов и в какие файлы их лучше набрать.
Сериализация здесь, по-моему, не подойдет, т.к. она записывает и востанавливает из файла данные-члены классов, объявленых в программе.
Спасибо smile.gif
Подняться вверх 
 
Сообщение #7
European
Вставить ник
сообщение 25:04:2008, 13:55
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 937
Регистрация: 4:09:2006
Из: Минск
Пользователь №: 6 316



Репутация: - 32 +


Цитата(Skyler @ 25:04:2008 - 15:44) *
в этих файлах должны быть данные о продукции. покажу пример на тех же силовых кабелях:
марка кабеля: ААшВ;
номинальное сечение= 35;
придельный ток= 200;
удельное электрическое сопротивление=0,035;
...
цена=5200.

Это лежит в текстовом файле в таком виде? Мда... Глупее идею сложно придумать.
Цитата(Skyler @ 25:04:2008 - 15:44) *
Сериализация здесь, по-моему, не подойдет, т.к. она записывает и востанавливает из файла данные-члены классов, объявленых в программе.

Что Вам мешает открыть файл и напрямую читать из него данные?
Подняться вверх 
 
Сообщение #8
Skyler
Вставить ник
сообщение 25:04:2008, 15:08
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 11
Регистрация: 5:03:2008
Из: Киев
Пользователь №: 15 681



Репутация: - 0 +


практически (только цифры)... согласен, что глупо, но тогда ничего другог в голову не пришло.
Цитата
Что Вам мешает открыть файл и напрямую читать из него данные?

Во первых, я не знаю как сохранить данные в таком файле (грубо говоря, куда это все набирать, если не в блокнот smile.gif ), а во-вторых - какими средствами MFC их оттуда читать
Подняться вверх 
 
Сообщение #9
sax_ol
Вставить ник
сообщение 25:04:2008, 15:46
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 2 064
Регистрация: 11:01:2007
Пользователь №: 8 750



Репутация: - 28 +


см. XML
Подняться вверх 
 
Сообщение #10
gamecreator
Вставить ник
сообщение 26:04:2008, 17:12
Цитата Ответить 


Гуру
***

Группа: Достойный программист
Сообщений: 316
Регистрация: 3:11:2007
Пользователь №: 13 517



Репутация: - 1 +


Цитата(Skyler @ 25:04:2008, 17:08 ) *
Во первых, я не знаю как сохранить данные в таком файле (грубо говоря, куда это все набирать, если не в блокнот smile.gif ), а во-вторых - какими средствами MFC их оттуда читать

fstream
Подняться вверх 
 
Сообщение #11
European
Вставить ник
сообщение 28:04:2008, 07:33
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 937
Регистрация: 4:09:2006
Из: Минск
Пользователь №: 6 316



Репутация: - 32 +


Цитата(Skyler @ 25:04:2008 - 17:08) *
Во первых, я не знаю как сохранить данные в таком файле (грубо говоря, куда это все набирать, если не в блокнот smile.gif ), а во-вторых - какими средствами MFC их оттуда читать

Для упрощения работы с файлами в MFC есть класс CFile (смотрите методы Read и Write)
Подняться вверх 
 
Сообщение #12
alexroot
Вставить ник
сообщение 6:05:2008, 17:54
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 8
Регистрация: 5:05:2008
Пользователь №: 17 086



Репутация: - 0 +


Делаешь текстовый файл bd.txt с таким содержимым

Код
ААшВ 35 200 0.035 5200
ББвШ 40 200 0.055 5999


читаешь его используя fstream

Например вот одна функция которой я читаю данные из текстового файла состоящего из двух столбцов

Код
int    vectors::set_vec_geolvert ( std::vector<data_geolvert>& mrvec_geolvert, int& ri_verbose )
{
    try
    {
        ifstream    fi_geolvert ( F_GEOLVERT, C_IOS_IN | C_IOS_NOCREATE );
        if ( !fi_geolvert )
        {
            cout << "File " << F_GEOLVERT << " not found or such directory not created." << endl;
            throw vectors::ex_error();
        }

        mrvec_geolvert.clear();

        char    c_strtemp[128];
        int        i_num_tip_str = 0;
        int        i_nazv_ige = 0;
        double    d_otm_podoshvi_ige = 0.0;
        bool    b_its_geolvert;
        data_geolvert    Data_geolvert;
        data_geolvert_ige    Data_geolvert_ige;

        b_its_geolvert = false;
        while (!fi_geolvert.eof () )
        {
            fi_geolvert >> c_strtemp;
            if (fi_geolvert.eof () )
                break;
            if (c_strtemp[0] == '{')
            {
                b_its_geolvert = true;
                i_num_tip_str++;
                continue;
            }
            if (c_strtemp[0] == '}')
            {
                b_its_geolvert = false;
                continue;
            }

            if (b_its_geolvert)
            {
                i_nazv_ige = atoi (c_strtemp);

                fi_geolvert >> d_otm_podoshvi_ige;
                if (fi_geolvert.eof () )
                {
                    cout << "ERROR: in file " << F_GEOLVERT << endl;
                    throw vectors::ex_error ();
                }

                Data_geolvert_ige.set_num_ige ( i_nazv_ige );
                Data_geolvert_ige.set_otm_podoshvi_ige ( d_otm_podoshvi_ige );

                Data_geolvert.set_num_tip_str ( i_num_tip_str );
                Data_geolvert.getr_geolvert_ige ().push_back ( Data_geolvert_ige );

                mrvec_geolvert.push_back(Data_geolvert);
            }
        }
    }
    catch (vectors::ex_error) { return 1; }
    return 0;
}


а пишу в файл например так

Код
// печать вектора показателей потери несущей способности сваи в файл F_STNLOSS

int    vectors::print_vec_stnloss (data_vecs&    rvecs)
{
    try
    {
        int        i_cycle1;
        ofstream    fo_stnloss (F_STNLOSS, ios::out);
        if (!fo_stnloss)
        {
            cout << "ERROR: Can't open file " << F_STNLOSS << endl;
            throw vectors::ex_error ();
        }
        for (i_cycle1 = 0; i_cycle1 < (int) rvecs.mvec_stnloss.size (); i_cycle1++)
        {
            fo_stnloss << rvecs.mvec_stnloss[i_cycle1].get_num_fe () << "\t" <<
                rvecs.mvec_stnloss[i_cycle1].get_stnloss () << endl;
        }
        fo_stnloss.close ();
    }
    catch (vectors::ex_error) {return 1;}
    return 0;
}
Подняться вверх 
 
Сообщение #13
Dimmuborgir
Вставить ник
сообщение 8:05:2008, 11:59
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 61
Регистрация: 27:12:2007
Пользователь №: 14 492



Репутация: - 0 +


для alexroot: да вы просто маньяк)
Цитата
for (i_cycle1 = 0; i_cycle1 < (int) rvecs.mvec_stnloss.size (); i_cycle1++)


PS:
Цитата
Тут только XML спасает.
шутник))

Сообщение отредактировал Dimmuborgir - 8:05:2008, 12:03
Подняться вверх 
 
Сообщение #14
sax_ol
Вставить ник
сообщение 8:05:2008, 18:57
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 2 064
Регистрация: 11:01:2007
Пользователь №: 8 750



Репутация: - 28 +


Цитата(Dimmuborgir @ 8:05:2008 - 13:59) *
шутник))
Ну в плане - MFC - да, доля иронии есть wink.gif, но в плане структуры данных, объема и работы с ними, считаю что xml тут самое то, а вы?
Подняться вверх 
 
Сообщение #15
alexroot
Вставить ник
сообщение 12:05:2008, 15:38
Цитата Ответить 


Новенький
*

Группа: Новенький
Сообщений: 8
Регистрация: 5:05:2008
Пользователь №: 17 086



Репутация: - 0 +


Цитата(Dimmuborgir @ 8:05:2008, 13:59 ) *
для alexroot: да вы просто маньяк)
Код
for (i_cycle1 = 0; i_cycle1 < (int) rvecs.mvec_stnloss.size (); i_cycle1++)


Самоучка huh.gif

Если что не так - пишите. Не вижу ничего крамольного в выделенной выше строке кода unsure.gif

Но мой пример, видимо, должен работать и для МFC приложения,
достаточно включить fstream.

Когдато я писал и с интерфейсом используя MFC,
и пользовался именно библиотекой fstream. Все прекрасно работало.

Но у меня нет столько времени для картинок, поэтому пока пишу только
консольные приложения, которые больше приносят пользы чем GUI MFC wink.gif
Подняться вверх 
 
Сообщение #16
Dimmuborgir
Вставить ник
сообщение 14:05:2008, 13:52
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 61
Регистрация: 27:12:2007
Пользователь №: 14 492



Репутация: - 0 +


для sax_ol: если честно, мне по работе не приходилось встречать больших объемов данных. Все задачи с которыми я на данный момент сталкивался (в области энергетики) решались очень легко с помощью простых текстовых файлов. Иногда еще бинарных. )

для alexroot: я имел ввиду длинное название переменных цикла, кои зачасту применяются многократно внутри последнего. может дело вкуса конечно) копипаст всегда поможет.)
Подняться вверх 
 
Сообщение #17


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 5:09:2008 - 06:42
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net