0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
1

Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл

24.08.2016, 13:58. Показов 2017. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно просто прочесть файл в структуру данных а потом оттуда записать в бинарный файл
Вот как выглядит текстовый файл:

11122 Mary Jane 4.6
43299 Peter Parker 12.5
28800 Harry Osborne 9.8
22245 Pokemon Go 10.5
12354 Van Damme 9.3
14443 Dohnald Trump 8.2
45633 Vladimir Putin 5.5
56632 Usain Bolt 4.7

А вот мой код:

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
#include <iostream>
#include <fstream>
#include <cstring>
#include <iomanip>
using namespace std;
 
struct intUsers
{
    int id;
    char userName[20];
    char userSecName[20];
    float timeOfConnect;
};
 
int main()
{
intUsers userInfo;
 
int x=0;
char fileName_binary[50];
 
cout<<"type the name for binary file: "<<endl;
cin>>fileName_binary;
ofstream out(fileName_binary, ios::binary);
 
ifstream in("internetUsers.txt");
    while(in)
    {
            in >> userInfo.id;
            in.get(userInfo.userName,20);
            in.get(userInfo.userSecName,20);
             in.ignore(100,'\n');
            in >> userInfo.timeOfConnect;
 
 
            cout<<" "<<userInfo.id;
            cout<<" "<<userInfo.userName;
            cout<<" "<<userInfo.userSecName;
            cout<<" "<<userInfo.timeOfConnect<<endl;
 
 
            out.write((char *)&userInfo, sizeof(userInfo));
     }
 
return 0;
}
Не могу понять что не так с моим кодом
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.08.2016, 13:58
Ответы с готовыми решениями:

Сконвертировать текстовый файл в бинарный, переписать только положительные числа в другой бинарный файл
Бинарные файлы!! Помогите пожалуйста. Дано бинарный файл ( данные сначала в текстовом, конвертирую...

Как правильно сохранить и потом считать структуру в бинарный файл
Есть структура struct card { int size; char *lear; int *name; }; Эта структура это карты...

Как правильно записать в бинарный файл структуру, в которой есть string?
Предположим есть вот такая структура struct MyStruct { int number; string str; }; Её...

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

9
2338 / 1826 / 753
Регистрация: 27.07.2012
Сообщений: 5,406
24.08.2016, 14:21 2
Лучший ответ Сообщение было отмечено almazuulu как решение

Решение

C++
1
2
3
4
5
6
7
struct intUsers
{
    int id;
    char userName[20]; // <--- ?
    char userSecName[20]; // <--- ?
    float timeOfConnect;
};
Если уж пользуешься С++, то зачем эта возня с массивами char? Используй std::string.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
 
struct intUsers
{
    int id;
    std::string userName;
    std::string userSecName;
    float timeOfConnect;
};
 
//...
 
    in >> userInfo.id;
    in >> userInfo.userName;
    in >> userInfo.userSecName;
    in >> userInfo.timeOfConnect
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.08.2016, 14:55 3
Цитата Сообщение от John Prick Посмотреть сообщение
Если уж пользуешься С++, то зачем эта возня с массивами char? Используй std::string.
Ему нужно структуры бинарным методом записывать.

Добавлено через 2 минуты
Цитата Сообщение от almazuulu Посмотреть сообщение
Не могу понять что не так с моим кодом
А что не так?

Добавлено через 3 минуты
Сделай проверку открытия файла для чтения. Это лишнее:
Цитата Сообщение от almazuulu Посмотреть сообщение
in.ignore(100,'\n');
Чтение первого поля помести в параметры while():
C++
1
2
3
 
    while(in >> userInfo.id)
    {
И get() не используй, раз отдельные слова читаешь, используй >>.
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
24.08.2016, 16:11 4
Лучший ответ Сообщение было отмечено almazuulu как решение

Решение

Как вариант
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
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
struct marvel {
    int id;
    string name;
    string surname;
    double time;
};
int main() {
    marvel comics;
    vector<marvel>val;
    ifstream ff;
    int i;
    string n,s;
    double h;
    ff.open("mar.txt");  // файл откуда читаем в структуру 
    while(!ff.eof()) {
        ff>>i>>n>>s>>h;
        comics.id=i;
        comics.name=n;
        comics.surname=s;
        comics.time=h;
        val.push_back(comics);
    }
    ff.close();
    ofstream outf("heros.txt",ios::binary| ios::in | ios::out);
    for(vector<marvel>::iterator iter=val.begin(); iter!=val.end(); iter++) {
        outf.write(reinterpret_cast<char*>(&iter),sizeof(iter));
        cout<<iter->id<<" "<<iter->name<<" "<<iter->surname<<" "<<iter->time<<endl;
    }
    return 0;
}
Добавлено через 57 минут
Или чуть проще
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
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
struct marvel {
    int id;
    string name;
    string surname;
    double time;
};
int main() {
    marvel comics;
    vector<marvel>val;
    ifstream ff;
    int i;
    string n,s;
    double h;
    ff.open("mar.txt");  // файл откуда читаем в структуру
    while(!ff.eof()) {
        ff>>i>>n>>s>>h;
        comics.id=i;
        comics.name=n;
        comics.surname=s;
        comics.time=h;
        val.push_back(comics);
    }
    ff.close();
    ofstream outf("heros.txt",ios::binary);
    for(vector<marvel>::iterator iter=val.begin(); iter!=val.end(); iter++) {
        comics=*iter;
        outf.write(reinterpret_cast<char*>(&comics),sizeof(comics));
    }
    outf.close();
    ifstream is("heros.txt",ios::binary);
    while(!is.eof()) {
        is.read(reinterpret_cast<char*>(&comics),sizeof(comics));
        cout<<comics.id<<" "<<comics.name<<" "<<comics.surname<<" "<<comics.time<<endl;
    }
    return 0;
}
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
24.08.2016, 16:14 5
Цитата Сообщение от Peoples Посмотреть сообщение
Как вариант
Память под string записываешь в файл? И что там?
0
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
25.08.2016, 03:37  [ТС] 6
John Prick,nd2, Peoples, Спасибо за ответ, вышло почти то что ожидал, но вот последнее имя повторяется дважды.
Вот, мой код что я исправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while(in)
    {
            in >> userInfo.id;
            in>>userInfo.userName;
            in>>userInfo.userSecName;
            in >> userInfo.timeOfConnect;
 
 
            cout<<" "<<userInfo.id;
            cout<<" "<<userInfo.userName;
            cout<<" "<<userInfo.userSecName;
            cout<<" "<<userInfo.timeOfConnect<<endl;
 
 
            out.write((char *)&userInfo, sizeof(userInfo));
     }
а вот, что выдает в результате. Нельзя сделать, чтобы последнее имя появилось только один раз?

Не получается прочесть правильно текстовый файл в структуру а затем в бинарный файл
0
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
25.08.2016, 03:45  [ТС] 7
Все, спасибо всем!ь Наконец-то все получилось, надо было оказывается вот так сделать и дописать лишь одну строку кода.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 while(in)
    {
            in>>userInfo.id;
            in>>userInfo.userName;
            in>>userInfo.userSecName;
            in>>userInfo.timeOfConnect;
            in.ignore(100,'\n');
 
 
            cout<<" "<<userInfo.id;
            cout<<" "<<userInfo.userName;
            cout<<" "<<userInfo.userSecName;
            cout<<" "<<userInfo.timeOfConnect<<endl;
 
 
            out.write((char *)&userInfo, sizeof(userInfo));
     }
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.08.2016, 04:13 8
Лучший ответ Сообщение было отмечено almazuulu как решение

Решение

Цитата Сообщение от almazuulu Посмотреть сообщение
но вот последнее имя повторяется дважды
Цитата Сообщение от almazuulu Посмотреть сообщение
надо было оказывается вот так сделать
Был совет на эту тему:
Цитата Сообщение от nd2 Посмотреть сообщение
Чтение первого поля помести в параметры while():
C++
1
2
while(in >> userInfo.id)
{
Добавлено через 11 минут
И не вздумай string-и использовать, если используешь бинарную запись в файл.
0
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
25.08.2016, 09:14  [ТС] 9
nd2, о спасибо большое! ))) реально не заметил оказывается. тоже полезно запомнить, возьму на заметку
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
25.08.2016, 10:11 10
almazuulu,
C++
1
2
3
4
5
6
ifstream is("heros.txt",ios::binary);
    is.read(reinterpret_cast<char*>(&comics),sizeof(comics));
    while(!is.eof()) {
        cout<<comics.id<<" "<<comics.name<<" "<<comics.surname<<" "<<comics.time<<endl;
        is.read(reinterpret_cast<char*>(&comics),sizeof(comics));
    }
Извиняюсь, так не будет повторяться
0
25.08.2016, 10:11
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2016, 10:11
Помогаю со студенческими работами здесь

Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой
Никак не получается отладить в BC++ 3.1. Как сделать в классах так, чтобы введённые данные...

Как прочесть бинарный файл?
Как прочесть бинарный файл ? (Если можно пример)

Как прочесть бинарный файл *.dep + *.lst
Как прочесть бинарный файл. Для записи или чтения данных так же используются вспомогательные файлы...

Прочесть бинарный файл и перекодировать его содержимое в base64Binary
Здравствуйте! Необходимо считать данные с файла электронной подписи и эти данные перекодировать в...


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

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

Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru