Работа с текстовыми файлами

Тема в разделе "MS Visual C++", создана пользователем Skyler, 23 апр 2008.

  1. Skyler

    Skyler Гость

    Репутация:
    0
    Здравствуйте, уважаемые господа!
    Прежде всего хочу выразить всем огромную благодарность за оказанную мне, как новичку, помощь!
    За время пребывания на форуме я у вас много чему научился, но "текущую" проблему решить не могу :)
    Вобщем мне нужно предоставить пользователю возможность выбора в программе некоторой стандартной продукции (к примеру, силовые электрические кабеля) программа должна "знать" их маркировку, технические характеристики и т.д. (двумерная таблица с несколькими столбцами). Когда я "писал" на VB, я просто "забивал" все в текстовые документы и потом, при запуске, программа считывала данные из этих файлов и "фасовала" их по соответствующим массивам.
    Подскажите пожалуйста как разрешить эту проблему в MFC. Заранее благодарен!
     
  2. Skyler

    Skyler Гость

    Репутация:
    0
    это очень плохо, так-как на изучение XML у меня просто не хватит времени... :o а мож хоть как-нибудь, данные даже не нужно динамически изменять или добавлять... :) хоть возьми да пропиши все прайсы в коде... :)
     
  3. gamecreator

    gamecreator Гость

    Репутация:
    0
    а почему аналогичный подход, описанный для бейсика не подходит для С++?
     
  4. Skyler

    Skyler Гость

    Репутация:
    0
    программа (пишет/читает) свои собственные документы посредством сериализации. файлы ж этой "базы данных" должны иметь иную структуру. возможно ли их сериализировать и как - я не знаю. в бейсике эти данные я писал в блокноте, а программа их читала в формате String (по-моему ф-ция ReadLine). как это сделать в MFC я, увы, тож не знаю ;)
     
  5. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    Расскажите подробнее про структуру, может поможем
     
  6. Skyler

    Skyler Гость

    Репутация:
    0
    в этих файлах должны быть данные о продукции. покажу пример на тех же силовых кабелях:
    марка кабеля: ААшВ;
    номинальное сечение= 35;
    придельный ток= 200;
    удельное электрическое сопротивление=0,035;
    ...
    цена=5200.
    Программа должна предоставить пользователю выбрать марку кабеля, например, из списка, а остальные характеристики "подтянуть" для дальнейших расчетов. мне нужно узнать как можно читать ети данные из файлов и в какие файлы их лучше набрать.
    Сериализация здесь, по-моему, не подойдет, т.к. она записывает и востанавливает из файла данные-члены классов, объявленых в программе.
    Спасибо :)
     
  7. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    Это лежит в текстовом файле в таком виде? Мда... Глупее идею сложно придумать.
    Что Вам мешает открыть файл и напрямую читать из него данные?
     
  8. Skyler

    Skyler Гость

    Репутация:
    0
    практически (только цифры)... согласен, что глупо, но тогда ничего другог в голову не пришло.
    Во первых, я не знаю как сохранить данные в таком файле (грубо говоря, куда это все набирать, если не в блокнот :) ), а во-вторых - какими средствами MFC их оттуда читать
     
  9. gamecreator

    gamecreator Гость

    Репутация:
    0
    fstream
     
  10. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
    Для упрощения работы с файлами в MFC есть класс CFile (смотрите методы Read и Write)
     
  11. alexroot

    alexroot Гость

    Репутация:
    0
    Делаешь текстовый файл bd.txt с таким содержимым

    Код (Text):
    ААшВ 35 200 0.035 5200
    ББвШ 40 200 0.055 5999
    читаешь его используя fstream

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

    Код (Text):
    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;
    }
    а пишу в файл например так

    Код (Text):
    // печать вектора показателей потери несущей способности сваи в файл 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;
    }
     
  12. Dimmuborgir

    Dimmuborgir Гость

    Репутация:
    0
    для alexroot: да вы просто маньяк)
    PS:
    шутник))
     
  13. alexroot

    alexroot Гость

    Репутация:
    0
    Самоучка :unsure:

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

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

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

    Но у меня нет столько времени для картинок, поэтому пока пишу только
    консольные приложения, которые больше приносят пользы чем GUI MFC ;)
     
  14. Dimmuborgir

    Dimmuborgir Гость

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

    для alexroot: я имел ввиду длинное название переменных цикла, кои зачасту применяются многократно внутри последнего. может дело вкуса конечно) копипаст всегда поможет.)
     
Загрузка...

Поделиться этой страницей