Форум программистов, компьютерный форум CyberForum.ru

Отобрать из текстового файла в бинарный информацию - C++

Восстановить пароль Регистрация
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 00:14     Отобрать из текстового файла в бинарный информацию #1
Здравствуйте. Нужно отобрать из текстового файла в бинарный информацию. Пожалуйста, подскажите как делать, с бинарными файлами вообще не знаком.

К примеру, в текстовом файле нам дана перечень имен и нужно отобрать, только те, имена которых начинаются на И.
Допустим,
Ирина
Валентина
Катерина
Инна

Соответственно, выдает только Ирина и Инна.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2014, 00:14     Отобрать из текстового файла в бинарный информацию
Посмотрите здесь:

C++ Занести в бинарный файл h из текстового файла t целые числа, упорядоченные по возрастанию
Данные из текстового файла записать в бинарный файл C++
C++ Из текстового файла переписать информацию в другой текстовый файл
C++ Функцией перевода текстового файла в бинарный
C++ Считать из текстового файла информацию начинающую со слова "example" и закачивающуюся числом 555
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
14.04.2014, 00:16     Отобрать из текстового файла в бинарный информацию #2
в чём конкретно проблема? Где ваш код сэр?
используй std::fstream.
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 01:00  [ТС]     Отобрать из текстового файла в бинарный информацию #3
О, я не совсем точно сформулировал задание.
У мне нужно получить двоичный файл из текстового. В текстовом у меня Имена, зарплата, сколько детей и есть или нет права у человека.

Пример:
Иванов м 15000 2 +
Семенова ж 13000 6 +
Катрянова ж 16000 2 -
Петров м 12000 5 -
Сидоров м 6000 3 +
Козлов м 8000 4 -
Краснов м 10000

У меня не совсем получается сделать преобразование.
Я скидываю код, который начали делать на курсах.

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 <vcl.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#pragma hdrstop
#include <tchar.h>
 
//В текстовом файле находится информация о этих людях:
//фамилия, пол, оклад, дети, права.
//Вывести в первый бинарный файл:
//женщин которые имеют более 1 ребенка и мужчин имеющих более 2 детей
//Во-второй:
//найти лиц с наибольшим и наименьшим окладом и сосчитать сколько 
//человек имеют права. Напечатать результат.
 
#pragma argsused
 
struct people1 {
    char name[15];
    int year;
    int oc[3];
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *in, *out;
 
    //Преобразование текстового файла file1.txt в двоичный file1.dat
    people1 a;
    int s=sizeof(a);
    out=fopen("file1.dat", "w+b");
    if ((in=fopen("file1.txt", "r")) != NULL)
    {
        while (fgets(a.surname,15,in) != NULL)
        {
            fgets(a.name, 15, in);
            fscanf(in, "%f %f %f %f\n", a.year, a.oc[0], a.oc[1], a.oc[2]);
            fwrite(&a,s,1,out);
        }
    }
 
    fclose(in);
    fclose(out);
 
    return 0;
}
Я так и не смог понять, что нужно делать дальше и как вообще работает этот код.
newbie666
Заблокирован
14.04.2014, 01:03     Отобрать из текстового файла в бинарный информацию #4
сформулируй задачу то по нормальному.
Что у тебя есть и что ты хочешь получить на выходе? Что ты понимаешь под бинарным файлом и для чего тебе нужно текстовой файл в бинарный перегонять?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.04.2014, 01:09     Отобрать из текстового файла в бинарный информацию #5
Цитата Сообщение от _Лето_ Посмотреть сообщение
Я так и не смог понять, что нужно делать дальше
В общем-то ничего (если, конечно, код работает).

Добавлено через 24 секунды
Цитата Сообщение от newbie666 Посмотреть сообщение
и для чего тебе нужно текстовой файл в бинарный перегонять?
Задание такое.

Добавлено через 1 минуту
Цитата Сообщение от _Лето_ Посмотреть сообщение
что нужно делать дальше
Для проверки работы кода, нужно открыть бинарный файл для чтения, прочитать и вывести содержимое.
newbie666
Заблокирован
14.04.2014, 01:13     Отобрать из текстового файла в бинарный информацию #6
21-й век на дворе, чё вы тут упорно юзаете fopen вместо std::fstrem ?
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 01:18  [ТС]     Отобрать из текстового файла в бинарный информацию #7
Само по-себе задание такое. Нужно вытащить информацию из текстового файла и засунуть в бинарный. Я не знаю для чего это нужно, просто так нужно сделать. Я скинул код, который начали на курсах писать и он вроде не работает.
alsav22
14.04.2014, 01:18
  #8

Не по теме:

Цитата Сообщение от newbie666 Посмотреть сообщение
21-й век на дворе, чё вы тут упорно юзаете fopen вместо std::fstrem ?
Си никто не отменял, правда ветка форума есть специальная.

_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 01:23  [ТС]     Отобрать из текстового файла в бинарный информацию #9
Курсы по С++ О___О

Добавлено через 3 минуты
Вот для примера еще один код для создания бинарных файлов:

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
#include "stdafx.h"
#include<iostream>
#include<fstream>
 
using namespace std;
 
int main()
{
    ofstream f;
    f.open("Af.bin",ios::binary);
    int a,c;
    for(int i=0;i<16;i++)
    {
        cin>>a;
        f.write((char *)&a, sizeof(int));
    }
    f.close();
    cout<<"Enter C: ",cin>>c;
    ifstream myin("Af.bin",ios::binary);
    if (!myin)
        cout<<"File not found!";
    bool found=false;
    myin.read((char *)&a, sizeof(int));
    while (!myin.eof() && !found)
    {
        if (a==c) 
            found=true;
        else 
            myin.read((char *)&a, sizeof(int));
    };
    if (found) 
        cout<<"Yes"<<endl;
    else
        cout<<"No"<<endl;
    myin.close();
    system("pause");
    return 0;
}
newbie666
Заблокирован
14.04.2014, 01:23     Отобрать из текстового файла в бинарный информацию #10
Цитата Сообщение от _Лето_ Посмотреть сообщение
Нужно вытащить информацию из текстового файла и засунуть в бинарный
ну а в чём может быть проблема то? открываешь текстовой файл, читаешь его и пишешь в бинарный ...
что конкретно - то не получается?
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 01:26  [ТС]     Отобрать из текстового файла в бинарный информацию #11
Я как понял это объединить как-то нужно и условия определенные задать. Но без понятия как это сделать

Добавлено через 1 минуту
В том-то и дело, что я не понимаю как его прочесть. Я вроде понял как открыть и как в бинарный переписать. А как инфу достать нужную?
newbie666
Заблокирован
14.04.2014, 01:26     Отобрать из текстового файла в бинарный информацию #12
Цитата Сообщение от _Лето_ Посмотреть сообщение
. А как инфу достать нужную?
откуда? из текстового файла или из уже готового бинарного?
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 01:28  [ТС]     Отобрать из текстового файла в бинарный информацию #13
Из текстового, наверно... Или лучше преобразовать его сразу в бинарный и доставать во-второй бинарный уже нужную информацию?
newbie666
Заблокирован
14.04.2014, 01:42     Отобрать из текстового файла в бинарный информацию #14
Цитата Сообщение от _Лето_ Посмотреть сообщение
Из текстового, наверно... Или лучше преобразовать его сразу в бинарный и доставать во-второй бинарный уже нужную информацию?
не знаю уж чего ты хочешь добиться.... вот тебе пример на основание первого поста:
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
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::fstream fs(L"input.txt", std::ios::in);
    if(!fs.is_open())
        return 0;
    std::vector<std::string> names;
    while (!fs.eof())
    {
        std::string tmp;
        fs >> tmp;
        if(!tmp.empty())
        {
            names.push_back(tmp);
            std::cout << "ADD NAME: " << tmp << std::endl;      
        }
    }
    fs.close();
 
    fs.open(L"output.bin", std::ios::out | std::ios::binary);
    if(!fs.is_open())
        return 0;
 
    for(auto it = names.begin(); it != names.end(); it++)
    {
        fs.write((char*)it->size(), sizeof(size_t));
        fs.write((char*)it->data(), it->size());
    }
    fs.close();
 
    return 0;
}
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 19:26  [ТС]     Отобрать из текстового файла в бинарный информацию #15
Почему-то не компилирует...
newbie666
Заблокирован
14.04.2014, 19:27     Отобрать из текстового файла в бинарный информацию #16
Цитата Сообщение от _Лето_ Посмотреть сообщение
Почему-то не компилирует...
бывает
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
14.04.2014, 21:03  [ТС]     Отобрать из текстового файла в бинарный информацию #17
Вы не знаете, как вывести строку, если символ, допустим, который стоит на 53 месте в строке был больше трех?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 21:32     Отобрать из текстового файла в бинарный информацию
Еще ссылки по теме:

Из текстового файла считать матрицу и записать ее в бинарный файл C++
Как считать информацию с текстового файла? C++
Считать данные из текстового файла, переписать в бинарный, и вывести в виде выровненной таблицы C++

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

Или воспользуйтесь поиском по форуму:
newbie666
Заблокирован
14.04.2014, 21:32     Отобрать из текстового файла в бинарный информацию #18
Цитата Сообщение от _Лето_ Посмотреть сообщение
Вы не знаете, как вывести строку, если символ, допустим, который стоит на 53 месте в строке был больше трех?
ты под кайфом что ли
ты сам понимаешь о чём спрашиваешь? Какую строку? Куда вывести? Причём тут 53-й символ и что помешает его вывести, если он больше 3-х ? ))))))))
Yandex
Объявления
14.04.2014, 21:32     Отобрать из текстового файла в бинарный информацию
Ответ Создать тему
Опции темы

Текущее время: 20:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru