Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> бин файлы 
:(
    Опции темы
afanp
Дата 10.6.2009, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



При добавлении данных в бинарный файл из обычного текстового происходит ошибка
Код


void StringParse(string s1){
    ofstream out;
    size_t found;
    string Side; //здесь мы парсим строку и забиваем все в RichBichP
    double rate;
    CRB_Bank RichBichP;
    unsigned int NumberOfPos=0;
    found=s1.find_first_of(" ");
    while(found!=string::npos){
        Side.assign(s1.substr(0,found));
        s1.erase(0,found+1);
        found=s1.find_first_of(" ");
        switch(NumberOfPos){
            case 0:{
    //            cout << Side << endl; //выбиваем дату
                RichBichP.date=Side;
                break;
                   }
            case 1:{
                char*c=new char[Side.size()];
                strcpy(c,Side.c_str());// выбиваем доллары
                rate=atof(c);
    //            cout << rate << endl;
                RichBichP.dollar=rate;
                break;
                   }
            case 2:{
                char*c=new char[Side.size()]; // выбиваем евро 
                strcpy(c,Side.c_str());
                rate=atof(c);
    //            cout << rate << endl;
                RichBichP.euro=rate;
                break;
                   }
        }
        NumberOfPos++;
    }
    char*c=new char[Side.size()]; // выбиваем фунты
    strcpy(c,s1.c_str());
    rate=atof(c);
    //cout << rate << endl;
    RichBichP.pound=rate;
    out.open("bin.txt",ios::app,ios::binary);
    out.write((char*)&RichBichP,sizeof(RichBichP));
    out.close();
}

void Import_From_Txt(){ // импортируем из текстового файла в бинарный 
    ifstream in; //открываем файл 
    in.open("importfromtxt.txt");
    if(!in){
        cout << "file cannot be opened or doesn't exist\n";
    }
    else{
        string side;
        while(!in.eof()){
            getline(in,side);
            StringParse(side);
        }
    }
}

void ShowRecords(){
    ifstream in;
    in.open("bin.txt",ios::binary);
    in.seekg(0);
    while(!in.eof()){
        CRB_Bank data;
        in.read((char*)&data,sizeof(data));  //приводим к типу чар и записываем все в data 
        if(!in.eof()){
            cout << data.date << " " << data.dollar << " " << data.euro;
            cout << " " << data.pound << endl;
        }
    }
}


Добавлено через 11 минут и 4 секунды
так, кажется разобрался. Косяк происходит из-за того, что в бин файле хранятся doubl'e значения. Кто поможет разобраться?
PM MAIL   Вверх
andrew_121
Дата 10.6.2009, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



afanp, Для начала объясни, что твоя программа должна делать?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 10.6.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



afanp

Ох какая программа нехорошая...
Цитата

char*c=new char[Side.size()];

выделение памяти, нигде не удаляется, указатель теряется..да еще и в цикле smile

Добавлено через 1 минуту и 54 секунды
Цитата(afanp @  10.6.2009,  18:16 Найти цитируемый пост)
Косяк происходит

Обкуренная программа smile побольше информации
PM   Вверх
afanp
Дата 10.6.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Предметная область «Курсы валют». Программа работает с бинарным файлом, содержащим 
записи об изменении курсов валют. Каждая запись включает дату и значения курсов трех валют по ЦБ в рублях на 
эту дату. Валюты доллар евро и фунт стерлингов.
Предусмотреть:
•    Добавление новой записи в файл.
•    Импорт записей из текстового файла.
•    Отображение всех валютных рекордов (когда хотя бы одна из валют принимает максимальное значение).
•    Отображение всех записей на экране, отсортированных по дате.
Когда я добавляю несколько записей из текстового файла в бинарный, программа вылетает. А почему - понять не могу :(  
Записи вида -  12.03.2200 22.30 31.30 49.30

Добавлено через 4 минуты и 9 секунд
azesmcar, 
когда пытаюсь удалить char*c=new char[Side.size()]; вылетает ошибка. Вот такие дела

Добавлено через 8 минут и 29 секунд
Но, когда запиысываю в файл 1 элемент, без дозаписи, т.е без ios::app то все работает. Но если более одного файла, то нифига  smile 
PM MAIL   Вверх
andrew_121
Дата 10.6.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



afanp, Т.е. Функция void StringParse(string s1) парсит строку вида 12.03.2200 22.30 31.30 49.30 ?
Тогда куда помещается результат парса?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
afanp
Дата 10.6.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



andrew_121, 
в элемент  CRB_Bank RichBichP;
который потом записывается в б-файл
PM MAIL   Вверх
andrew_121
Дата 10.6.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Я думаю, тебе нужно определить структуру типа:
Код

struct Kurs {
   std::string date;
   std::string dollar;
   std::string euro;
   std::string funt;
};

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


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
azesmcar
Дата 10.6.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(afanp @  10.6.2009,  21:01 Найти цитируемый пост)
когда пытаюсь удалить char*c=new char[Side.size()]; вылетает ошибка. Вот такие дела

A, ну тогда конечно удалять не стоит. Подумаешь, память. Не терять же время на то чтобы проверить почему программа вылетает при удалении.
Кстати то что программа вылетает - скорее всего признак того что вы там что-то затираете, выходите за рамки своего массива. Короче на протяжении всего своего существования программа медленными (медленными потому что все это быстро работать никак не может), но твердыми шагами идет к тому чтобы благополучно умереть. Можно узнать что конкретно нужно сделать и что не работает. И еще по возможности локализировать проблему и показать проблемный участок. А то весь код как-то неохота читать

Это сообщение отредактировал(а) azesmcar - 10.6.2009, 21:38
PM   Вверх
andrew_121
Дата 10.6.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(afanp @  10.6.2009,  21:29 Найти цитируемый пост)
в элемент  CRB_Bank RichBichP;
который потом записывается в б-файл 

ну приведи его описание что-ли. или я должен догадаться?

Добавлено через 1 минуту и 37 секунд
Цитата(azesmcar @  10.6.2009,  21:38 Найти цитируемый пост)
A, ну тогда конечно удалять не стоит. Подумаешь, память. Не терять же время на то чтобы проверить почему программа вылетает при удалении.

жаль нет таких смайликов, которые могли бы передать мое мнение по этому поводу(

Добавлено через 2 минуты и 27 секунд
Цитата(azesmcar @  10.6.2009,  21:38 Найти цитируемый пост)
медленными потому что все это быстро работать никак не может

 smile  smile  smile  smile  smile  smile  smile  smile  smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
xvr
Дата 11.6.2009, 11:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Еще баг в копилку: вот это out.open("bin.txt",ios::app,ios::binary); должно быть таким out.open("bin.txt",ios::app|ios::binary);

PM MAIL   Вверх
andrew_121
Дата 11.6.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(xvr @  11.6.2009,  11:39 Найти цитируемый пост)
Еще баг в копилку: вот это out.open("bin.txt",ios::app,ios::binary); должно быть таким out.open("bin.txt",ios::app|ios::binary);

ГЫ smile  Проглядели smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.